bash指令碼程式設計-while迴圈
阿新 • • 發佈:2018-11-07
bash指令碼程式設計:
程式語言:
資料結構
順序執行
選擇執行
條件測試
執行命令或[[ EXPRESSION ]]
執行狀態返回值;
if
case
迴圈執行
將某程式碼段重複執行多次;
重複執行多少次?
迴圈次數事先已知:
迴圈次數事先未知;
必須有進入條件和退出條件:
for, while, until
函式:結構化程式設計及程式碼重用;
function
for迴圈語法:
for NAME in LIST; do
迴圈體
done
列表生成方式:
(1) 整數列表
{start..end}
$(seq start [[step]end])
(2) glob
/etc/rc.d/rc3.d/K*
(3) 命令
通過ping命令探測172.16.250.1-254範圍內的所有主機的線上狀態;
#!/bin/bash # net='172.16.250' uphosts=0 downhosts=0 for i in {1..20}; do ping -c 1 -w 1 ${net}.${i} &> /dev/null if [ $? -eq 0 ]; then echo "${net}.${i} is up." let uphosts++ else echo "${net}.${i} is down." let downhosts++ fi done echo "Up hosts: $uphosts." echo "Down hosts: $downhosts."
while迴圈:
while CONDITION; do
迴圈體
done
CONDITION:迴圈控制條件;進入迴圈之前,先做一次判斷;每一次迴圈之後會再次做判斷;
條件為“true”,則執行一次迴圈;直到條件測試狀態為“false”終止迴圈;
因此:CONDTION一般應該有迴圈控制變數;而此變數的值會在迴圈體不斷地被修正;
示例:求100以內所有正整數之和;
#!/bin/bash # declare -i sum=0 declare -i i=1 while [ $i -le 100 ]; do let sum+=$i let i++ done echo "$i" echo "Summary: $sum."
練習:新增10個使用者
user1-user10 #!/bin/bash # declare -i i=1 declare -i users=0 while [ $i -le 10 ]; do if ! id user$i &> /dev/null; then useradd user$i echo "Add user: user$i." let users++ fi let i++ done echo "Add $users users."
練習:通過ping命令探測172.16.250.1-254範圍內的所有主機的線上狀態;(用while迴圈)
#!/bin/bash # declare -i i=1 declare -i uphosts=0 declare -i downhosts=0 net='172.16.250' while [ $i -le 20 ]; do if ping -c 1 -w 1 $net.$i &> /dev/null; then echo "$net.$i is up." let uphosts++ else echo "$net.$i is down." let downhosts++ fi let i++ done echo "Up hosts: $uphosts." echo "Down hosts: $downhosts."
練習:列印九九乘法表;(分別使用for和while迴圈實現)
#!/bin/bash # for j in {1..9}; do for i in $(seq 1 $j); do echo -e -n "${i}X${j}=$[$i*$j]\t" done echo done #!/bin/bash # declare -i i=1 declare -i j=1 while [ $j -le 9 ]; do while [ $i -le $j ]; do echo -e -n "${i}X${j}=$[$i*$j]\t" let i++ done echo let i=1 let j++ done
練習:利用RANDOM生成10個隨機數字,輸出這個10數字,並顯示其中的最大者和最小者;
#!/bin/bash # declare -i max=0 declare -i min=0 declare -i i=1 while [ $i -le 9 ]; do rand=$RANDOM echo $rand if [ $i -eq 1 ]; then max=$rand min=$rand fi if [ $rand -gt $max ]; then max=$rand fi if [ $rand -lt $min ]; then min=$rand fi let i++ done echo "MAX: $max." echo "MIN: $min."