Bash: различия между версиями
Admin (обсуждение | вклад) |
(нет различий)
|
Текущая версия от 06:39, 9 августа 2025
Оболочка
HISTSIZE и HISTFILE
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
//lxc debian PATH="$PATH:/bin:/sbin" export PATH
Приемы
cd - //аналогично cd $PWDOLD
!! //повторное использование предыдущей команды
!rm //повторное использование последней команды rm
ee=2 ; for i in $(echo eval {1..$ee}) ; do echo $i ; done //по умолчанию сначала раскрываются фигурные скобки, а потом переменные; eval дает сначала раскрыться переменным
ANSI escape-последовательности
echo -e "\033[0m" //сброс
echo -e "\033[${INT};${INT}m" //несколько значений через точку с запятой
| color | text | bg |
|---|---|---|
| black | 30 | 40 |
| red | 31 | 41 |
| green | 32 | 42 |
| yellow | 33 | 43 |
| blue | 34 | 44 |
| purple | 35 | 45 |
| cyan | 36 | 46 |
| white | 37 | 47 |
| style | on | off |
| bold | 1 | 22 |
| italic | 3 | 23 |
| underline | 4 | 24 |
| inverse | 7 | 27 |
PS1
| Обозначение | Описание |
|---|---|
| \a | ASCII-символ bell (07) |
| \d | Дата в формате «День недели Месяц Дата» (например, «Пн Ноя 26») |
| \D{format} | Значение format передается функции strftime. В строку приглашения подставляется результат выполнения функции. Фигурные скобки обязательны. |
| \e | ASCII-символ escape (033) |
| \h | Hostname (имя хоста) до первого символа точка «.». |
| \H | Hostname (имя хоста, компьютера). |
| \j | Количество фоновых процессов, запущенных в данной оболочке |
| \l | Базовое название оболочки. |
| \n | Переход на новую строку. |
| \r | Переход к началу строки (возврат каретки). |
| \s | Имя оболочки (имя shell). |
| \t | Текущее время в 24-часовом формате (HH:MM:SS). |
| \T | Текущее время в 12-часовом формате (HH:MM:SS). |
| \@ | Текущее время в 12-часовом am/pm формате. |
| \A | Текущее время в 24-часовом формате (HH:MM). |
| \u | Имя пользователя. |
| \v | Версия bash (например, 4.4). |
| \V | Версия bash с версией релиза (например, 4.4.19). |
| \w | Текущий абсолютный путь (полный путь). Домашняя директория сокращается до значка тильды «~». |
| \W | Текущий относительный путь. Домашняя директория сокращается до значка тильды «~». |
| \! | Номер команды в истории команд (history). |
| \# | Номер команды в текущей сессии терминала. |
| \$ | Символ приглашения (# для root, $ для обычных пользователей). |
| \nnn | Символ, соответствующий восьмеричному значению nnn. |
| \\ | Символ обратной косой черты «\». |
| \[ | Начало последовательности непечатаемых символов. |
| \] | Конец последовательности. |
Синтаксис
Переменные
IFS=$'\n' //разделитель полей — только перевод строки
IFS=: //разделитель полей — знак ":"
$$ //PID самого скрипта
$! //PID последнего запущенного в фоне процесса
$# //общее количество параметров переданных скрипту
$* //все аргументы переданыне скрипту(выводятся в строку)
$@ //тоже самое, что и предыдущий, но параметры выводятся в столбик
$? //выходное значение последней выполневшийся команды
$SECONDS //время работы оболочки
${var:-value} //если значение параметра не установлено, то использовать это значение
${var:=value} //если значение параметра не установлено, то использовать это значение и параметру задать это значение
${var:?value} //если значение параметра не установлено, то вывести это значение и выйти из сценария с кодом ошибки
${var:+value} //использовать это значение, если значение параметра установлено, а иначе не использовать ничего
//без двоеточия просто выводится значение; с двоетичием переменной назначается новое значение, если переменная существует но пустая
${#var} //длина переменной
${var#template} //удалить из значения переменной значение шаблона (начиная слева). удалить самый короткий фрагмент
${var##template} //удалить из значения переменной значение шаблона (начиная слева). удалить самый длинный фрагмент
${var%template} //удалить из значения переменной значение шаблона (начиная справа). удалить самый короткий фрагмент
${var%%template} //удалить из значения переменной значение шаблона (начиная справа). удалить самый длинный фрагмент
${var:0:1} //переменная : начальная позиция : кол-во извлекаемых символов перменной
${var/template} //переменная / удалить первое совпадение шаблона
${var/template/replace} //переменная / первое совпадение шаблона / замена шаблона
${var//template/replace} //переменная / каждое совпадение шаблона / замена шаблона
${var/#template/replace} //переменная / совпадение шаблона с началом значания переменной / замена шаблона
${var/%template/replace} //переменная / совпадение шаблона с концом значания переменной / замена шаблона
var=(0 1 2 3 4 5) //переменная-массив
echo ${var[n]} //использовать одно из значения массива
echo ${var[-n]} //номер массива с конца (справа)
echo ${var[*]}; echo ${var[@]} //все элеметы массива
echo ${#var[*]}; echo ${#var[@]} //кол-во элементов массива
declare //объявление переменной
Операторы выбора
case "$1" in "-i" ) finstall ;; "-r" ) fremove ;; * ) echo text esac
case "$1" in 1 | 2 ) echo "1-2";; 3 | 4 ) echo "3-4";; * ) echo "error" esac
while getopts ":i:r" OPTNAME ; do case "$OPTNAME" in "-i" ) const_var_i=$OPTARG ;; "-r" ) const_var_r="r" ;; * ) echo text esac done
Операторы сравнения
n1 -eq n2 : n1 == n2
n1 -ge n2 : n1 >= n2
n1 -gt n2 : n1 > n2
n1 -le n2 : n1 <= n2
n1 -lt n2 : n1 < n2
n1 -ne n2 : n1 != n2
Циклы
for (( i=0; i<=100; i++ )) {
echo $i
}
for (( i=0; i<=100; i++ )) ; do echo $i done
while [ true ] ; do $command done