Это старая версия документа!
Bash
Переменные и параметры
$$ | pid текущего shell (самого процесса-сценария) |
$! | pid последнего процесса в фоновом режиме |
$? | код возврата последнего процесса (функции или скрипта) |
$x | где x — номер параметра, переданного скрипту ($1, $2 и т. д., $0 — последний запущенный скрипт) |
$# | количество аргументов командной строки |
$* | все аргументы в виде одной строки (слова) |
$@ | то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово) |
$- | список флагов, переданных сценарию |
$_ | содержит последний аргумент предыдущей команды |
Потоки вывода и файловые дескрипторы
- du -h 1 > ./log 2>&1
- 1 - Поток вывода
- 2 - Поток ошибок
- &1 - обозначает файловый дескриптор 1
Конструкции
0-9
A
Массивы
array=( one two three ) files=( "/etc/passwd" "/etc/group" "/etc/hosts" ) limits=( 10, 20, 26, 39, 48)
B
C
case
case "$1" in start) esac
D
debug
Необходимо добавить параметр -x Пример:
# bash -x script.sh
dialog
Представляет из себя интерфейс для библиотеки ncurses. И позволяет строить диалоги из скрипта. Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.
E
F
function
function f1{ # params $1 echo $1 } f1 A
foreach
for fn in `cat filenames.txt`; do echo "the next file is $fn" cat $fn done
while read filename do echo "Printing: $filename" cat "$filename" done < filenames.txt
for fn in cat filenames.txt; do cat "$fn"; done
for i in "${arrayName[@]}" do : # do whatever on $i done
G
H
I
Индексы
- [@] - Ссылка на копию массива в переменной $1
- [*] - Строка
- [n]
- var=(1 2 3 4)
- echo ${var[@]}
if
if что-то then # делать тот-то else # делать тот-то fi
if что-то; then # делать тот-то else # делать тот-то fi
input
Запрос символа от пользователя
echo -n "Продолжить? (y/n) " read item case "$item" in y|Y) echo "Ввели «y», продолжаем..." ;; n|N) echo "Ввели «n», завершаем..." exit 0 ;; *) echo "Ничего не ввели. Выполняем действие по умолчанию..." ;; esac
J
K
L
M
N
O
P
Q
R
S
status
Проверка статуса выполнения программы
rm test_file if [ $? -eq 0 ]; then echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" echo else echo -n "$(tput hpa $(tput cols))$(tput cub 6)[fail]" echo fi
T
test
- Параметры:
- -f - Наличие файла
- -d - Наличие директории
- -e -
- -z - Наличие данных в строке
- Сокращенный вариант [ ]
tput
- tput hpa N — сдвиг курсора на N позиций
- tput cols получает ширину окна терминала
- tput cub 6 — сдвигает курсор на 6 позиций влево