Промышленное программирование
Лекция 2. Shell скрипты
Лекция 2. Shell скрипты
Для поиска файлов (и групповых операций над ними) удобно использовать утилиту find
# Find all directories named src
find . -name src -type d
# Find all python files that have a folder named test in their path
find . -path '*/test/*.py' -type f
# Find all files modified in the last day
find . -mtime -1
# Find all zip files with size in range 500k to 10M
find . -size +500k -size -10M -name '*.tar.gz'
# Delete all files with .tmp extension
find . -name '*.tmp' -exec rm {} \;
# Find all PNG files and convert them to JPG
find . -name '*.png' -exec convert {} {}.jpg \;
grep
(-C
- контекст вокруг совпадения, -R
- поиск рекурсивно в директории)history
(обычно вместе с grep
)ls -l <FILENAME>
chmod
#!<PATH>\n
(Shebang line)#
является символом комментария, поэтому при интерпретации файла верхняя строка игнорируетсяgit
- есть мощный cli
клиент).sh
или никакого, конкретный интерпретатор указывается через #!
bash
. По умолчанию, если скриптом планируют пользоваться другие люди, рекомендую использовать егоfoo=bar
(если написать с пробелами foo = bar
, то это будет интерпретироваться как команда foo
с аргументами =
и bar
)$foo
(или, если есть подчеркивания в имени, ${foo_name}
) - вместо $foo
подставится значение переменной'
или "
. Однако, они не эквивалентны - в строках, определенных через '
переменные не подставляютсяexport $foo=bar
(или export $foo
)$0
- имя команды текущего процесса; $1
, $2
, ... - аргументы командной строки, $*
- список всех аргументов, $#
- количество аргументов, $?
- код возврата предыдущей выполненной команды$( CMD )
для подстановки вывода команды в нужное место скрипта<( CMD )
||
и &&
?
означает любой символ в имени, *
- произвольное количество любых символов{}
через запятую варианты для подстановки, если множество имен имеет общую подстрокуtrue
и false
)[
предназначена для формирования логических выражений вида [ EXPRESSION ]
(должны отделяться пробелом)-n STRING
- истина, если длина строки ненулевая-z STRING
- истина, если строка пустаяSTRING1 = STRING2
- истина, если строки равны (и !=
аналогично)NUM1 -eq NUM2
- истина, если числа равны (аналогично -ne
, -gt
, -ge
, -lt
, -le
)-e FILENAME
- указанный путь существует (-d
- плюс является каталогом, -f
- плюс является обычным файлом) if ВЫРАЖЕНИЕ 1
then
НАБОР КОМАНД 1
elif ВЫРАЖЕНИЕ 2
НАБОР КОМАНД 2
else
НАБОР КОМАНД 3
fi
case ПЕРЕМЕННАЯ in
ВАРИАНТ1|ВАРИАНТ2|ВАРИАНТ3)
НАБОР КОММАНД 1
;;
ВАРИАНТ4)
НАБОР КОММАНД 2
;;
*)
НАБОР КОММАНД 3
;;
esac
12
while УСЛОВИЕ
do
НАБОР КОММАНД
done
for ИМЯ in СПИСОК
do
НАБОР КОММАНД
done
13
function_name () {
commands
}
function function_name {
commands
}
local
return
(0 - успех, 1-255 - неуспех)$1
, $2
, ...read
читает одну строку (до символа \n
) и сохраняет ее значение в указанной переменной (read SOME_VAR
)printf
- форматированный выводЛекция 2. Shell скрипты