Промышленное программирование
Лекция 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
}
localreturn (0 - успех, 1-255 - неуспех)$1, $2, ...read читает одну строку (до символа \n) и сохраняет ее значение в указанной переменной (read SOME_VAR)printf - форматированный выводЛекция 2. Shell скрипты