{ command1 & pid1=$! ;}; { command2 & pid2=$! ;}; wait $pid1 $pid2
TIME=10 # прерывание через 10 секунд trap 'exit' ALRM ( sleep $TIME && kill -ALRM "$$" ) &
func() { echo $1 echo "---" for i in "$*"; do echo $i; done echo "---" for i in "$@"; do echo $i; done echo "---" for i in $*; do echo $i; done } func "aaa bbb" "ccc ddd" # aaa bbb # --- # aaa bbb ccc ddd # --- # aaa bbb # ccc ddd # --- # aaa # bbb # ccc # ddd
array=("aaa bbb" "ccc ddd") echo ${#array[@]} # количество элементов # 2 for i in "${array[@]}"; do echo $i ; done # aaa bbb # ccc ddd for i in "${array[*]}"; do echo $i ; done # aaa bbb ccc ddd for i in ${array[@]}; do echo $i ; done # aaa # bbb # ccc # ddd for ((i=0; $i<${#array[@]}; i++)); do echo ${array[$i]}; done #aaa bbb #ccc ddd
trap 'echo словили ERR' ERR # псевдосигнал, отрабатывает при ошибке в скрипте trap 'echo словили EXIT' EXIT # псевдосигнал, отрабатывает при выходе из скрипта # EXIT должен быть определен перед остальными ловушками trap 'echo словили SIGTERM; exit 1' SIGTERM # kill -15 trap 'echo словили INT; exit 1' INT # ^C или kill -2 trap 'echo словили HUP; exit 1' HUP # разрыв соединения или kill -1 # для для игнорирования сигнала trap '' INT # ^C фтопку # можно определить обработчик и отдельно trapINT() { echo "убери руки!" } trap trapINT INT
# usage: progress <максимум> <текущее_положение> PB_NOPERC=1 # если определена, не выводятся проценты PB_NOITEM=1 # если определена, не выводится текущее_положение/максимум progress() { local width=50 local max=$1 curr=$2 pos=$width perc=100 if [ $curr -lt $max ]; then pos=$((curr*width/max)) perc=$((curr*100/max)) fi local str="\r[$(printf "%${pos}s" \ | sed 's/ /#/g')$(printf "%$((width-$pos))s" \ | sed 's/ /-/g')]" [ -z "$PB_NOPERC" ] && str="$str $perc%" [ -z "$PB_NOITEM" ] && str="$str ($curr/$max)" echo -ne $str [ $perc -eq 100 ] && echo }
IFS=$'\n' for str in `cat ini | sed 's/^ *//' | egrep -v '^$|^#'`; do eval $(echo $str|sed 's/ *=/=/;s/= */=/') done echo $var ini содержит: # коммент var = value
${#string} Длина строки Извлечение подстроки ${string:position} # с position до конца ${string:position:length} # с position длиной length символов ${string: -length} # последние length символов Удаление части строки ${string#substring} # до первого с начала ${string##substring} # до последнего с начала ${string%substring} # до первого с конца ${string%%substring} # до последнего с конца Замена подстроки ${string/substring/replacement} # первое вхождение ${string//substring/replacement} # все вхождения ${var/#Pattern/Replacement} # Если в переменной var найдено совпадение с Pattern, причем совпадающая подстрока расположена в начале строки (префикс), то оно заменяется на Replacement. Поиск ведется с начала строки ${var/%Pattern/Replacement} # Если в переменной var найдено совпадение с Pattern, причем совпадающая подстрока расположена в конце строки (суффикс), то оно заменяется на Replacement. Поиск ведется с конца строки
(Символ : имеет значение только когда parameter инициализирован "пустым" значением) ${!ref} # косвенная ссылка на переменную var='str' ref='var' echo ${!ref} # str ${parameter-default}, ${parameter:-default} Если параметр отсутствует, то используется значение по-умолчанию. ${parameter=default}, ${parameter:=default} Если значения параметров не задананы явно, то они принимают значения по-умолчанию. ${parameter+alt_value}, ${parameter:+alt_value} Если параметр имеет какое либо значение, то используется alt_value, иначе -- null ("пустая" строка). ${parameter?err_msg}, ${parameter:?err_msg} Если parameter инициализирован, то используется его значение, в противном случае -- выводится err_msg. ${!varprefix*}, ${!varprefix@} Поиск по шаблону всех, ранее объявленных переменных, имена которых начинаются с varprefix.
while getopts ":ab:c" Option # Начальное объявление цикла анализа опций. # a, b, c -- это возможные опции (ключи). # Символ : после опции 'b' указывает на то, что с данной опцией может идти # дополнительный аргумент. do case $Option in a ) # Действия, предусмотренные опцией 'a'. b ) # Действия, предусмотренные опцией 'b', а так же необходимо обработать $OPTARG, # в которой находится дополнительный аргумент этой опции. ... c ) # Действия, предусмотренные опцией 'c'. esac done shift $(($OPTIND - 1))
$# - количество переданных параметров обращение к последнему параметру: args=$# last=${!args} ! - косвенное обращение к переменным var1="string" var2="var1" echo ${!var2} # string $- Список флагов, переданных сценарию (командой set). $_ Специальная переменная, содержит последний аргумент предыдущей команды. $! PID последнего, запущенного в фоне, процесса $$ PID самого процесса-сценария. $? код завершения. $FUNCNAME имя текущей функции $LINENO Номер строки исполняемого сценария. $OLDPWD прежний рабочий каталог ("OLD-Print-Working-Directory") $PIPESTATUS Код возврата канала (конвейера). Переменная $PIPESTATUS может давать неверные значения при вызове из командной строки. bash$ who | grep nobody | sort bash$ echo ${PIPESTATUS[*]} $PPID Переменная $PPID хранит PID (идентификатор) родительского процесса. $PWD рабочий (текущий) каталог
BOLD='\e[1m' UNDERLINE='\e[4m' BLINK='\e[5m' INVERSE='\e[7m' BREAK='\e[m' #Foreground colors: BLACK='\e[0;30m' RED='\e[0;31m' GREEN='\e[0;32m' BROWN='\e[0;33m' BLUE='\e[0;34m' MAGENTA='\e[0;35m' CYAN='\e[0;36m' GRAY='\e[0;37m' DEF='\e[0;39m' DGRAY='\e[1;30m' LRED='\e[1;31m' LGREEN='\e[1;32m' YELLOW='\e[1;33m' LBLUE='\e[1;34m' LMAGENTA='\e[1;35m' LCYAN='\e[1;36m' WHITE='\e[1;37m' # backgrounds colors BLACK='\e[40m' RED='\e[41m' GREEN='\e[42m' BROWN='\e[43m' BLUE='\e[44m' MAGENTA='\e[45m' CYAN='\e[46m' GRAY='\e[47m' DEF='\e[49m'
- предыдущий рабочий каталог. Соответствует содержимому внутренней переменной $OLDPWD. ~+ текущий рабочий каталог. Соответствует содержимому внутренней переменной $PWD. : символ заполнитель в операция с двумя операндами создать пустой файл : > file ввод одинарной кавычки в строку в одинарных кавычках: echo 'str'\''ing' # str'ing Специальное назначение некоторых экранированных символов используемых совместно с echo и sed \n перевод строки (новая строка) \r перевод каретки \t табуляция \v вертикальная табуляция \b забой (backspace) \a "звонок" (сигнал) \0xx ASCII-символ с кодом 0xx в восьмеричном виде)