Bash

Материал из Записи-напоминании
Перейти к навигации Перейти к поиску

Оболочка

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