### Немного bash ###### top [args | Позиционные аргументы](#args) [var | Переменные](#var) [read | запрос ввода](#read) [if... then... else](#if) [for](#for) [&& и ||](#and-or) [while](#while) [until](#until) [case](#case) *** ##### args **Позиционные аргументы** ```bash #!/bin/bash # запусти скрипт с несколькими аргументами echo Первый аргумент - $1 echo Второй аргумент - $2 echo Третий аргумент - $3 ``` *примеры запуска скрипта* ```bash user@host:~$ ./scr arg1 arg2 arg3 Первый аргумент - arg1 Второй аргумент - arg2 Третий аргумент - arg3 user@host:~$ ./scr arg1 arg2 Первый аргумент - arg1 Второй аргумент - arg2 Третий аргумент - user@host:~$ ./scr arg1 arg2 arg3 arg4 Первый аргумент - arg1 Второй аргумент - arg2 Третий аргумент - arg3 ``` **Перебор аргументов в цикле** ```bash #!/bin/bash # run this script with a few arguments echo you have entered $# arguments for i in "$@"; do echo $i done exit 0 ``` `$#` - счетчик, показывающий, сколько аргументов было использовано при запуске сценарий. `$@` - относится ко всем аргументам, которые использовались при запуске сценария. *пример запуска скрипта* ```bash user@host:~$ ./scr arg1 arg2 arg3 arg4 you have entered 4 arguments arg1 arg2 arg3 arg4 ``` [вверх](#top) *** ##### var Переменные `var=value` ```bash user@host:~$ var="значение переменной" user@host:~$ echo $var значение переменной user@host:~$ var=8 user@host:~$ echo $var 8 user@host:~$ today=$(date +%d.%m.%Y) user@host:~$ echo $today 03.08.2021 user@host:~$ today=`date +%d.%m.%Y` user@host:~$ echo $today 03.08.2021 ``` [вверх](#top) *** ##### read Запрос ввода ```bash #!/bin/bash if [ -z $1 ]; then echo Введите имя read NAME else NAME=$1 fi echo Вы ввели - $NAME exit 0 ``` `-z $1` - проверка существования аргумента все возможные значения проверок в справке `man test` *перевод доступен здесь https://www.opennet.ru/man.shtml?topic=test&category=1&russian=0* *пример запуска скрипта* ```bash user@host:~$ ./scr Катя Вы ввели - Катя user@host:~$ ./scr Введите имя Ира Вы ввели - Ира ``` [вверх](#top) *** ##### if if... then... else ```bash #!/bin/bash # скрипт проверяет тип файла, переданного в качестве аргумента при запуске if [ -f $1 ] then echo "$1 - это файл" elif [ -d $1 ] then echo "$1 - это директория" else echo "Не понятно, что это \$1" fi exit 0 ``` *пример запуска* ```bash [da2001@co1 scripts]$ ./filechk /etc/hosts /etc/hosts - это файл [da2001@co1 scripts]$ ./filechk /etc /etc - это директория [da2001@co1 scripts]$ ./filechk ./non_exist_file Не понятно, что это $1 ``` [вверх](#top) *** ##### for ```bash #!/bin/bash for i in {0..6} do echo "Hi $i" done ``` ```bash user@host:~$ ./scr Hi 0 Hi 1 Hi 2 Hi 3 ``` ```bash #!/bin/bash for i in Ира Лена Катя do echo "Hi, $i" done ``` ```bash user@host:~$ ./scr Hi, Ира Hi, Лена Hi, Катя ``` ```bash #!/bin/bash for (( c=1; c<=5; c++ )) do echo "Hi $c" done ``` ```bash user@host:~$ ./scr Hi 1 Hi 2 Hi 3 Hi 4 Hi 5 ``` ```bash #!/bin/bash for (( c=4; c>=0; c-- )) do echo "Hi $c" done ``` ```bash user@host:~$ ./scr Hi 4 Hi 3 Hi 2 Hi 1 Hi 0 ``` [вверх](#top) *** ##### and, or && и || `&&` - логическое И. Вторая часть оператора будет выполнена только если первая часть истинна. `||` - логическое ИЛИ. Вторая часть оператора будет выполнена только если первая часть неверна. ```bash user@host:~$ for i in {10..13}; do ping -c 2 192.168.1.$i > /dev/null && echo 192.168.1.$i - доступен || echo 192.168.1.$i - НЕ доступен; done 192.168.1.10 - доступен 192.168.1.11 - доступен 192.168.1.12 - доступен 192.168.1.13 - НЕ доступен ``` [вверх](#top) *** ##### while `while` - выполнять пока условие истинно ```bash #!/bin/bash x=1 while [ $x -lt 5 ] do echo "Значение счетчика: $x" x=$(( $x + 1 )) done ``` ```bash user@host:~$ ./scr Значение счетчика: 1 Значение счетчика: 2 Значение счетчика: 3 Значение счетчика: 4 ``` [вверх](#top) *** ##### until `until` - выполнять пока условие ложно ```bash #!/bin/bash count=1 until [ $count -gt 4 ] do echo "Значение счетчика: $count" count=$(( $count + 1 )) done ``` ```bash user@host:~$ ./scr Значение счетчика: 1 Значение счетчика: 2 Значение счетчика: 3 Значение счетчика: 4 ``` [вверх](#top) *** ##### case `case` - перебор условий ```bash #!/bin/bash echo -n "Введите страну: " read COUNTRY echo -n "Официальный язык в стране $COUNTRY это " case $COUNTRY in Литва) echo "Латвийский" ;; Румыния | Молдова) echo "Румынский" ;; Италия | "Сан Марино" | Швейцария | "Ватикан") echo "Итальянский" ;; *) echo "unknown" ;; esac ``` - каждое условие заканчивается `)` - после условия описываются команды, которые необходимо выполнить, в конце ставится `;;` - `*)` относится ко всем остальным значениям, которые явно не указаны ранее ```bash user@host:~$ ./scr Введите страну: Ватикан Официальный язык в стране Ватикан это Итальянский user@host:~$ ./scr Введите страну: Россия Официальный язык в стране Россия это unknown ``` [вверх](#top) ***