Циклы нам пригодятся в том случае, когда нужно выполнить какое-то количество одинаковых операций. Допустим сменить пароли всем пользователям в системе или проверить доступность десятка сайтов.
В простейшем случае используется следующий синтаксис:
for VARIABLE in значение1 значение2 значение3 значение4 значение5 значениеN do # действие 1 # действие 2 # действие 3 done
Предположим, что каждое из значений выше, это длина стороны квадрата.
В качестве каждого действия, при помощи bc, мы посчитаем периметр , площадь и давление, которое оказывает российский боксёр Николай Валуев, равномерно надавливая своим весом (150 кг) на эту площадь :)))
Вспомним, что периметр считается по фрмуле:
P=4a
Площадь:
S=a2
Давление:
p=(mg)/S
Поехали:
#!/bin/bash for a in 3 5 14 8 20 do P=$(echo "$a*4"|bc) echo "Периметр квадрата со стороной $a см: $P см." S=$(echo "$a^2"|bc) echo "Площадь квадрата со стороной $a см: $S кв.см." p=$(echo "(150*9.8)/(($S/10000)*1000)"|bc -l) echo "Давление Н.Валуева на квадрат со стороной $a см: $p кПа" done
А теперь всё то же самое, только длины сторон будем передавать в качестве параметров и, как обычно, проверим, что параметры переданы:
#!/bin/bash if [[ "$#" == "0" ]] then echo "Выход. Пожалуйста, запустите скрипт с параметрами" exit 1 fi for a in $@ do P=$(echo "$a*4"|bc) echo "Периметр квадрата со стороной $a см: $P см." S=$(echo "$a^2"|bc) echo "Площадь квадрата со стороной $a см: $S кв.см." p=$(echo "(150*9.8)/(($S/10000)*1000)"|bc -l) echo "Давление Н.Валуева на квадрат со стороной $a см: $p кПа" done