Bash скрипты
При запуске скрипта создается дочерняя консоль, в ней выполняется скрипт и результат возвращается в консоль.
Можно запускать через source, имя (если . в PATH), ./... , и ./ ... & С фоновой задачей аккуратно с объемом вывода, ^C не работает.
Функции
function functname
{
shell commands
}
functname ( )
{
shell commands
}
Используют позиционные переменные.
functname "one" $7
Если внутри функции нужна локальная переменная, то local var1="something", иначе используется глобальная переменная.
Программы для работы с функциями
declare | -f список функций с описанием |
-F только имена функций | |
unset fname | удалить функцию из памяти |
type fname | Описание функции |
-t выведет тип |
Приоритет при вызове из консоли
- Aliases
- Служебные слова типа if, ...
- Функции
- Встроенные команды типа cd, type, ...
- Скрипты и исполняемые команды
Переменные
Описывается $varname или ${varname} Например есть переменная UID. Для вывода 0_ нужно использовать echo ${varname}_
$1, $2, ... | Позиционные параметры |
$* | Строка, содержащая все параметры через пробел |
$@ | Равна N строкам-параметрам. Актуально при передаче в функции. |
$# | Количество аргументов |
var1=$(cmd) | Сохранение результата cmd в переменную |
Определение глобальной переменной: var1="something"
Обработка значений переменных перед вводом
${varname:-word } | Если переменная не существует или существует но пустая - вернет word |
${varname:=word} | Если переменная не существует или существует но пустая - присвоит ей word и вернет word |
${varname:?message} | Если переменная не существует или существует но пустая - выведет сообщение и завершит скрипт |
${varname:+word} | Если переменная существует или пустая - вернет word, иначе null |
${varname:offset:length} |
Срез. count=frogfootman ${count:4} вернет footman ${count:4:4} вернет foot |
Обработка переменных
${var#pattern}
|
Если шаблон совпадает с началом значения переменной - удалить самую короткую часть от начала строки с совпадением и вернуть результат var="/home/user/docs/file.txt" |
${var##pattern} |
var="/home/user/docs/file.txt" echo ${var##*/} # file.txt (отрезано всё до последнего "/") |
${variable%pattern} |
file="archive.tar.gz" echo ${file%.*} # archive.tar |
${variable%%pattern} |
file="archive.tar.gz" echo ${file%%.*} # archive |
${variable/pattern/string} |
Наибольшее совпадение шаблона с переменной заменяется строкой. Первое совпадение |
${variable//pattern/ string} |
Наибольшее совпадение шаблона с переменной заменяется строкой. Все совпадения |