Циклы while:
В следующем примере переменной i присваивается значение 1. Потом значение переменной, находящейся в теле цикла между do и done, при каждом выполнении цикла увеличивается на 1, пока не будет превышено значение 5. Обратите внимание, что условия должны указываться в квадратных скобках, как это делалось с условными переходами if, с командой test или с ее сокращенным вариантом.
Пример 0:
i=1; while [ $i -le 5 ]; do echo $i; i=$[$i+1]; done
Пример 1:
Следующий цикл обрабатывает все имена файлов, получаемые после выполнения команды ls *. jpg: ls *.txt | while read file ; do echo "$file" ; done
Пример 2:
Следующий цикл обрабатывает все имена файлов, проходит по каждому файлу и печатает содержимое файла. ls *.txt | while read file ; do echo "\\n ### \\n ### \\t $file \\n ###" && cat "$file" ; done
Бесконечный цикл
#!/bin/bash while : do echo "Press [CTRL+C] to stop.." sleep 1 done
Бесконечный цикл
#!/bin/bash while true do echo "Press [CTRL+C] to stop.." sleep 1 done
Бесконечный цикл показывать время каждую секунду
#!/bin/bash while :;do clear ;date ;sleep 1;done
Бесконечный цикл меню
#!/bin/bash
# Purpose: Display various options to operator using menus
# Author: Vivek Gite < vivek @ nixcraft . com > under GPL v2.0+
# ---------------------------------------------------------------------------
# capture CTRL+C, CTRL+Z and quit singles using the trap
trap '' SIGINT
trap '' SIGQUIT
trap '' SIGTSTP
# display message and pause
pause(){
local m="$@"
echo "$m"
read -p "Press [Enter] key to continue..." key
}
# set an
while :
do
# show menu
clear
echo "---------------------------------"
echo " M A I N - M E N U"
echo "---------------------------------"
echo "1. Show current date/time"
echo "2. Show what users are doing"
echo "3. Show top memory & cpu eating process"
echo "4. Show network stats"
echo "5. Exit"
echo "---------------------------------"
read -r -p "Enter your choice [1-5] : " c
# take action
case $c in
1) pause "$(date)";;
2) w| less;;
3) echo '*** Top 10 Memory eating process:'; ps -auxf | sort -nr -k 4 | head -10;
echo; echo '*** Top 10 CPU eating process:';ps -auxf | sort -nr -k 3 | head -10;
echo; pause;;
4) netstat -s | less;;
5) break;;
*) Pause "Select between 1 to 5 only"
esac
done