Рубрики
bash

bash while

Циклы 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