Циклы нам пригодятся в том случае, когда нужно выполнить какое-то количество одинаковых операций. Допустим сменить пароли всем пользователям в системе или проверить доступность десятка сайтов.
В простейшем случае используется следующий синтаксис:
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