Инструменты пользователя

Инструменты сайта


linux:overall:bash:scripts

Это старая версия документа!


Скриптинг

Первой строкой указывается т.н. shebang (#!) - последовательность двух символов, далее указывается путь к исполняющему файлу под-оболочки, так же, в этой строке можно передавать аргументы.
Если оболочка не указана явно, используется так же, что и запускает данный скрипт.

Для исполнения скрипта, у файла должно быть разрешение выполнения (+x), но если передать скрипт аргументом команде bash ./script, тогда бит необязателен.
Если путь к скрипту указан в $PATH (например /usr/local/bin/ либо /bin/), то запускать можно просто по имени, без «./».

Комментарии предваряются символом решетки (#).
exit - сообщает результат (0-успех) работы родительскому процессу, при отсутствии используется результат последней команды.

Аргументы (доступ к ним)

  • $? - код возврата последнего процесса (функции или скрипта).
  • $№ - аргументы, по номеру. &0 - последний запущенный скрипт.
  • $# - кол-во переданных аргументов.
  • $* - все аргументы одной строкой.
  • $@ - все аргументы отдельной строкой.
  • $- - список флагов, переданных скрипту.
  • shift - команда, после нее первый аргумент в $@ теряется, остальные сдвигаются влево.

Переменные

Пробелы не используются при определении
Знак доллара используется только при чтении значения, работа с переменной без этого знака.
В фигурных скобках более строгая форма (${variable}).
Двойные кавычки - «нестрогие», и не влияют на механизм подстановки, в отличии от одинарных кавычек.
Конкатенация строк происходит без дополнительных символов: $Val1«_»$Val2.

Встроенные переменные

  • $BASH - путь к исполняемому файлу bash.
  • $GROUPS - группы пользователя.
  • $HOME - домашний каталог.
  • $HOSTNAME - сетевое имя хоста.
  • $SHLVL - уровень вложенности shell.
  • $SECONDS - время работы скрипта.
  • $REPLY - для ввода read, по умолчанию.

Условный оператор

Двойные квадратные скобки работают в целом так же, как и [одинарные квадратные скобки], но имеют дополнительные возможности вроде лучшей поддержки регулярных выражений.
Двойные круглые скобки это конструкция, позволяющая осуществлять арифметические вычисления внутри Bash.

if [[ "$name" == "Ryan" ]] && ! [[ "$time" -lt 2000 ]]; then
  ...
elif [[ "$day" == "New Year's Eve" ]] || [[ "$coffee_intake" -gt 9000 ]]; then
  ...
else
  ...
fi
 
if [ "$age" -gt 30 ]; then
  echo "What an oldy."
fi
(( count++ ))
echo "$count"
 
if (( -57 + 30 + 27 )); then
  echo "First one"
 
echo $(( (5 > 3) + (0 == 0) ))

В условии можно использовать код завершения любой команды

if grep -q coffee dialogue.txt; then .. fount/not found; fi
 
if cmp a b &> /dev/null; then ... fi
:!:
 
:!: Old

Проверяет, является ли результат 0 (истина).
Условие условие проверяется с помощью команды test, на данный момент, команда является встроенной т.е. не вызывает аналогичную утилиту.
Условия можно указать следующими способами:

1) , 2) , 3) , 4) , 5) , 6) , 7) , 8)
listPorts[-1]++
linux/overall/bash/scripts.1660463195.txt.gz · Последнее изменение: 2022/08/14 07:46 — admin