Циклы while:
1 2 3 |
В следующем примере переменной i присваивается значение 1. Потом значение переменной, находящейся в теле цикла между do и done, при каждом выполнении цикла увеличивается на 1, пока не будет превышено значение 5. Обратите внимание, что условия должны указываться в квадратных скобках, как это делалось с условными переходами if, с командой test или с ее сокращенным вариантом. |
Пример 0:
1 |
i=1; while [ $i -le 5 ]; do echo $i; i=$[$i+1]; done |
Пример 1:
1 2 |
Следующий цикл обрабатывает все имена файлов, получаемые после выполнения команды ls *. jpg: ls *.txt | while read file ; do echo "$file" ; done |
Пример 2:
1 2 |
Следующий цикл обрабатывает все имена файлов, проходит по каждому файлу и печатает содержимое файла. ls *.txt | while read file ; do echo "\\n ### \\n ### \\t $file \\n ###" && cat "$file" ; done |
Бесконечный цикл
1 2 3 4 5 6 |
#!/bin/bash while : do echo "Press [CTRL+C] to stop.." sleep 1 done |
Бесконечный цикл
1 2 3 4 5 6 |
#!/bin/bash while true do echo "Press [CTRL+C] to stop.." sleep 1 done |
Бесконечный цикл показывать время каждую секунду
1 2 |
#!/bin/bash while :;do clear ;date ;sleep 1;done |
Бесконечный цикл меню
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#!/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 |