If-условные переходы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
В файле iftst с помощью if-запроса мы проверяем, были ли переданы два параметра. Если этого не произошло, выводится сообщение об ошибке. Программа завершается командой exit с возвращаемым значением, неравным нулю (индикатор ошибок). В противном случае содержимое обоих параметров выводится на экран. Критерием для условного перехода является возвращаемое значение последней команды перед then. Если эта команда возвращает значение 0, то условие выполняется. Если then указывается в той же строке, что и предыдущая команда (без перехода на следующую), то команда должна завершаться точкой с запятой. Условие может быть создано с помощью команды test оболочки bash. При этом оператор -ne означает «не равно» (not equal). Команда test применяется всякий раз, когда необходимо сравнить друг с другом две последовательности символов или два числа, когда необходимо проверить, существует ли файл, и т. д. Вместо test может использоваться краткий вариант в квадратных скобках. При этом перед названием команды [ и после него ] нужно ставить пробел. Кроме того, из структуры if можно вычленить вторую команду echo, так как из-за наличия команд exit все строки кода, следующие за fi, будут выполняться только после того, как будет реализовано условие. |
ВНИМАНИЕ:
1 2 3 4 5 |
Обратите внимание, что значение истинности (true) в bash равно 0, а ложности (false) — не равно 0. В большинстве других языков программирования значения прямо противоположны! Команды, завершаемые без ошибок, возвращают значение 0. Любое значение, не равное 0, указывает на ошибку. Некоторые команды возвращают различные значения в зависимости от типа ошибки. |
Пример 0, скрипт iftst_v0:
1 2 3 4 5 6 7 8 |
#! /bin/sh # Пример iftst_v0 if test $# -ne 2; then echo "Команде должно быть передано ровно два параметра!" exit 1 else echo "Параметр 1: $1. Параметр 2: $2" fi |
Пример 0, скрипта iftst_v1:
1 2 3 4 5 6 7 |
#! /bin/sh # Пример iftst_v1 if [ $# -ne 2 ]; then echo " Команде должно быть передано ровно два параметра!" exit 1 fi echo "Параметр 1: $1, Параметр 2: $2" |
Пример 1:
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash a="`ls -al | wc -l`" echo ${a} if (( a > 2 )); then true echo "a > 2" else false echo "a<2" fi |
Пример 2:
1 2 |
#!!! выполняем команду ls если выведет больше 2 то выполнится команда ls /etc/ if (( `ls /home/ | wc -l` > 2)); then true ; else false ; fi && ls /etc/ |
Пример 3:
1 2 3 4 5 6 7 |
#!!! Удаляем из каталога (/temp/33) каталог, если вывод ls (/temp/33) больше 1 if (( `ls /temp/33 | wc -l` > 1)); then /usr/bin/find /tmp/33 -mindepth 1 -maxdepth 1 -type d | sort -n | head -n1 | while read LINE; do echo "[/tmp/33] ${LINE}" rm -rf "${LINE}" done fi |
Пример 4:
1 2 3 4 5 6 7 |
#!!! определение свободного места #!/bin/bash freespace=`df -m | grep "/dev/sdb" | awk '{print $4}'` if [ $freespace -le 700 ] then echo "Warning!!! On the Server running out of space on your hard drive. Freespace - "$freespace"Mb" | mail -s "FreeSpase on the Server" root@domain.com fi |
Пример 5:
1 2 3 4 5 6 7 8 9 10 |
#!!! Проверка маршрута для openvpn #!/bin/bash # Script for cron, check if route to VPN server exists route=`ip r | grep "85.143.252.68"` if [ -z "$route" ]; then systemctl restart openvpn-client@MskLabSokolov.service logger "Route doesn't exist, restart OpenVPN client" fi |