1. 程式人生 > >bash指令碼程式設計-while迴圈

bash指令碼程式設計-while迴圈

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."