Рейтинг: 5 / 5
Условные операторы
Двойные квадратные скобки [[ … ]] bash интерпретирует как один элемент с кодом возврата. Внутри разрешается использование операторов && и ||.
## Однострочная запись [[ -f /dir/file ]] || { echo «File not exists»; exit 1; } ## Вложенные условия if [ … ] && [ … ]; then … elif [[ … && … ]]; then … else … fi;
Пример проверки что переменная не пустая:
if [[ $some_var != » ]]; then echo ‘Переменная не пустая’ fi
Комбинированные условия с отрицанием:
if [ -f /path/ ] && [ ! -z «$status» ]; then echo «Файл и переменная существуют» else echo «Нет файла или переменной» fi
Оператор case:
case «$extension» in (html|htm) echo «Это HTML файл» ;; pdf) echo «Это PDF файл» ;; *) echo «Не известный тип файла: $extension» ;; esac
Условия сравнения
- Практическое руководство: Bash цикл с …
- Bash-скрипты, часть 2: циклы / Блог …
- Read Программирование на Bash с нуля …
- Циклы Bash | Losst
Смотрите доп. условия проверки файлов —
### Файлы ### -e Проверить что файл существует (-f, -d) -f Файл существует (!-f — не существует) -d Каталог существует -s Файл существует и не пустой -r Файл существует и доступен на чтение -w … на запись -x … на выполнение -h Символическая ссылка -b Файл существует и является блочным устройством -с Файл существует и является символьным устройством (character device) -p Файл существует и является потоковым устройством (pipe device) -S Файл существует и является сокетом ### Строки ### -z Пустая строка -n Не пустая строка == Равно (!= не равно) ### Числа ### -eq Равно -ne Не равно -lt Меньше -le Меньше или равно -gt Больше -ge Больше или равно
Установка дефолтного значения переменной
Не работает для массивов!
Установка значения по умолчанию для аргумента:
SOME_VAR=${1:-‘default’} # Если первый аргумент ($1) пустой — присвоить строку SOME_VAR=${2:-$default} # Если аргумент $2 пустой — установить значение $default : ${my_var:=$default} # Если $my_var пустая — присвоить ей значение из $default
Установка дефолтного значения для существующей переменной:
TEST=’YES’ : ${TEST:=’some string’} echo $TEST # YES
Основные команды
Команда интерпретатора Bash man
Отображает руководства по командам. К примеру, последующая команда выдаст вам все данные о команде cat:
Команда интерпретатора Bash cat
Cчитывает файл, переданный в качестве аргумента, с выводом его содержимого по стандартному каналу вывода. При передаче нескольких файлов в виде аргумента происходит вывод конкатенированного содержимого всех файлов.
Команда интерпретатора Bash echo
Осуществляет вывод своих аргументов по стандартному каналу вывода.
$ echo Hello World Hello World
При использовании без аргументов выводится пустая строка.
Команда интерпретатора Bash head
Читает лишь первые десять строк любого переданного текста, выводя их по стандартному каналу. Можно изменить количество выводимых строк:
Команда интерпретатора Bash tail
Работает аналогично head, однако читает строки с конца:

$ tail -50
Дополнительно есть возможность просматривания добавляемых к файлу строк в режиме реального времени, используя флаг -f:
Команда интерпретатора Bash less
Позволяет перемещаться куску текста либо переданному файлу в обоих направлениях.
$ less $ ps aux | less
Кстати, о символе | мы расскажем ниже в блоке про команду интерпретатора Bash history.
Команды интерпретатора Bash true и false
Первая всегда возвращает ноль в качестве выходного статуса для индикации успеха, вторая, соответственно, не ноль в качестве выходного статуса для индикации неудачи.
$? — это переменная, содержащая выходной статус последней запущенной команды. Выходной статус — код возврата программы. В нашем случае 0 будет означать успешное выполнение программы, а любое значение, которое больше нуля, будет отражать факт возникновения ошибок в процессе выполнения. Кстати, именно по этой причине в интерпретаторе Bash истиной (true) считается 0, а ложью (false) — всё, что не ноль.
$ true $ echo $? $ false $ echo $? 1
Команда интерпретатора Bash grep
Служит для поиска переданной строки в указанном файле:
$ cat user:student password:123 user:teacher password:321 $ grep 'student` user:student password:123
Кроме того, может принимать несколько регулярных выражений и файлов для уточнения формата текста.
Команда интерпретатора Bash sed
Потоковый редактор, который преобразует входные текстовые данные. Используется для замены выражений следующим образом: s/regexp/replacement/g. К примеру, в следующем коде произойдёт замена всех слов «Hello» на «Hi»:
$ cat Hello World $ sed 's/Hello/Hi/g' Hi World
Руководство по sed.
Команда интерпретатора Bash history
Выводит историю командной строки. Часто используется совместно с grep при поиске конкретной команды. В коде ниже будут найдены все команды, которые содержат строку g++:
$ history | grep g++ 155 g++ 159 g++
Кстати, здесь тоже можно увидеть символ | — это конвейер (pipe). С его помощью происходит перенаправление вывода одной команды на вход другой. Так, в вышеописанном примере вся история (в обычном режиме она выводится с помощью history непосредственно в вывод терминала), перенаправляется в grep в качестве входных данных. То есть мы не увидим вывод команды history, зато увидим вывод команды grep.
Команда интерпретатора Bash export
Устанавливает переменные окружения для их передачи дочерним процессам. Допустим, так мы можем передать переменную name, имеющую значение student:
Команда интерпретатора Bash ps
Выводит данные о запущенных процессах.

$ ps PID TTY TIME CMD 35346 pts/2 00:00:00 bash
В результате выведутся 4 элемента: — PID (ID процесса), — TTY (тип терминала), — TIME (время работы процесса), — CMD (имя команды, запустившей процесс).
Команда интерпретатора Bash awk
Находит и меняет текст в файлах на основании заданного шаблона: awk ‘pattern {action}’
Команда интерпретатора Bash wget
Закачивает файлы из интернета, помещая их в текущий каталог.
Команда интерпретатора Bash nc
Утилита для отладки сети. Вот руководство.
Команда интерпретатора Bash ping
Служит для тестирования сетевого подключения.
$ ping PING (74) 56(84) bytes of data. 64 bytes from (74): icmp_req=1 ttl=57 time=7.82 ms — ping statistics — 1 packets transmitted, 1 received, % packet loss, time 8ms rtt min/avg/max/mdev = 7.794/ ms
Статистика в конце отображает число подключений, которые были совершены до завершения команды. Также отображается время их выполнения.
Статья написана специально для курса по Linux на основании материалов Bash-Cheatsheet.
Переменные и параметры скрипта
Приведу как пример небольшой пример, который мы разберем:
#!/bin/bash #указываем где у нас хранится bash-интерпретатор parametr1=$1 #присваиваем переменной parametr1 значение первого параметра скриптаscript_name=$0 #присваиваем переменной script_name значение имени скриптаecho "Вы запустили скрипт с именем $script_name и параметром $parametr1" # команда echo выводит определенную строку, обращение к переменным осуществляется через $имя_ `Вы запустили скрипт с именем $script_name и параметром $parametr1` # здесь мы видим другие кавычки, разница в том, что в одинарных кавычках не происходит подстановки 0 #Выход с кодом 0 (удачное завершение работы скрипта)
Результат выполнения скрипта:
[email protected]:~$ ./ qwerty
Вы запустили скрипт с именем ./ и параметром qwertyВы запустили скрипт с именем $script_name и параметром $parametr1
После того как мы познакомились как использовать переменные и передавать скрипту параметры, время познакомиться с зарезервированными переменными:
$DIRSTACK — содержимое вершины стека каталогов$EDITOR — текстовый редактор по умолчанию$EUID — Эффективный UID. Если вы использовали программу su для выполнения команд от другого пользователя, то эта переменная содержит UID этого пользователя, в то время как…$UID — реальный идентификатор, который устанавливается только при логине.$FUNCNAME — имя текущей функции в скрипте.$GROUPS — массив групп к которым принадлежит текущий пользователь$HOME — домашний каталог пользователя$HOSTNAME — ваш hostname$HOSTTYPE — архитектура машины.$LC_CTYPE — внутренняя переменная, котороя определяет кодировку символов$OLDPWD — прежний рабочий каталог$OSTYPE — тип ОС$PATH — путь поиска программ$PPID — идентификатор родительского процесса$SECONDS — время работы скрипта(в сек.)$# — общее количество параметров переданных скрипту$* — все аргументы переданыне скрипту(выводятся в строку)[email protected] — тоже самое, что и предыдущий, но параметры выводятся в столбик$! — PID последнего запущенного в фоне процесса$$ — PID самого скрипта
Как узнать значение последнего параметра, передаваемого BASH-скрипту
И последний вопрос, который рассмотрим в этой статье, это как узнать значение последнего параметра, передаваемого BASH-скрипту сразу (без перебора, подсчёта и разбора). В этом вопросе нам выручит как раз переменная $#, указывающая порядковый номер последнего параметра. А зная номер параметра, можно сразу получить его значение в переменной ${!#}. На практике выглядит это так:
#!/bin/bash echo ‘Количество параметров на входе: ‘ $# if [ -n «$1» ] then echo -e ‘Последний параметр имеет значение: ‘ ${!#} ‘\n’ echo ‘Имя скрипта: ‘ $0 echo ‘1-й параметр: ‘ $1 echo ‘2-й параметр: ‘ $2 echo ‘3-й параметр: ‘ $3 echo ‘4-й параметр: ‘ $4 else echo ‘Нет данных на входе скрипта ‘ $0 fi
- Bash — Википедия
- Read Программирование на Bash с нуля …
- Read Программирование на Bash с нуля …
- If в Bash: от новичка до профессионала …
Результатом выполнения будет следующее:
[email protected]:~# ./ parameter «$number» 12 ‘Конец! =)’ Количество параметров на входе: 4 Последний параметр имеет значение: Конец! =) Имя скрипта: ./ 1-й параметр: parameter 2-й параметр: Поместим значение в переменную $number 3-й параметр: 12 4-й параметр: Конец! =)