Існує спеціальний оператор, який зручно використовувати при великій кількості розгалужень. Оформити такий запис дозволяє оператор case, формат якого такий:
case var in
S1) <оператори 1>;;
S2) <оператори 2>;;
S3) < оператори 3>;;
*) <оператори 4>;;
esac
В залежності від того, чи збігається значення змінної var із значенням S1, S2абоS3, виконуються відповідно <оператори 1>, <оператори 2> або <оператори 3>. Якщо вказаного збігу немає, тоді виконуються <оператори 4>.
3.8 Оператор циклу for
Операторforмає декілька форматів. Найпростіший формат цього оператор циклу, який використовує одновимірний список, має такий вигляд:
forvar in list
do
<оператори>
done
В даному випадку <оператори> виконуються по одному разу для кожного значення змінної var із списку list. Приклад сценарію для знаходження суми елементів одновимірного масиву:
#!/bin/bash
mas=’3 7 12 5 8’
sum=0
for var in $mas
do
let sum=$sum + $var
done
echo “result is $sum”
Формат циклу for з використанням масивів дуже схожий на відповідний формат циклу в мові Сі.
Приклад сценарію з використанням циклу for для знаходження максимального значення серед елементів одновимірного масиву:
#!/bin/bash
mas[0]=3
mas[1]=7
mas[2]=12
mas[3]=5
mas[4]=8
max=mas[0]
for((i=0; i<5; i++))
do
if [ $m ax –lt ${mas[i]} ]
then let max=${mas[i]}
fi
Done
echo “result is $max”
3.9 Оператори циклу while та until
Оператор циклу whileможна використовувати для повторного виконання <операторів> до тих пір, поки заданий <вираз> буде залишатись істинним:
while <вираз>
do
<оператори>
done
Можливо, що цикл не буде виконано жодного разу, якщозаданий <вираз> виявиться хибним з самого початку.
Приклад сценарію з використанням циклу for для знаходження максимального значення серед елементів двовимірного масиву, який вводиться із клавіатури:
#!/bin/bash
for((i=0; i<5; i++))
do
for((j=0; j<5; j++))
do
read mas[i][j]
done
Done
max=mas[0]
for((i=0; i<5; i++))
do
for((j=0; j<5; j++))
do
if [ $max –lt ${mas[i][j]} ]
then let max=${mas[i][j]}
fi
Done
Done
echo “result is $max”
Оператор циклу untilможна використовувати для повторного виконання <операторів> до тих пір, поки заданий <вираз> буде залишатись хибним:
until<вираз>
do
<оператори>
done