十、while迴圈及應用實踐 (一)while迴圈語法 (二)範例1: 每隔2s輸出系統負載情況。 1、腳本執行的方法 | 用法 | 說明 | | | | | sh while1.sh & | 把腳本while1.sh放到後臺執行(後臺運行腳本時常用) | | nohup while1.sh & | ...
十、while迴圈及應用實踐
(一)while迴圈語法
while 迴圈語法:
while <條件表達式>
do
指令
done
(二)範例1:
每隔2s輸出系統負載情況。
[root@centos6-kvm3 scripts]# cat 10-01.sh
#!/bin/bash
while true
do
uptime >>/tmp/oldboy.log
sleep 2
done
[root@centos6-kvm3 scripts]#
1、腳本執行的方法
用法 | 說明 |
---|---|
sh while1.sh & | 把腳本while1.sh放到後臺執行(後臺運行腳本時常用)* |
nohup while1.sh & | 使用nohup 把腳本while.sh放到後臺執行。 |
ctl+c | 停止執行當前腳本或者任務 |
ctl+z | 暫停執行當前腳本或者任務 |
bg | 把當前腳本或者任務放到後臺執行,bg可以理解為backround |
fg | 把當前腳本或者任務拿到前臺執行,如果有多個任務,可以使用fg加任務編號調出對應腳本任務,如fg 2,調出第二個腳本任務,fg可以理解為frontground |
jobs | 查看當前執行的腳本或者任務 |
kill | 關閉執行的腳本任務,即以“kill %任務編號”的形式關閉腳本,這個任務標號,可以通過jobs獲得。 |
後臺運行 & ,nohup,screen(運維人員)
常用命令:
- kill,killall,pkill :殺掉進程
- ps:查看進程。
- pstree:顯示進程狀態樹。
- top:顯示進程。
- renice:改變優先權。
- nohup:用戶退出系統之後繼續工作。
- pgrep:查找匹配條件的進程。
- strace:跟蹤一個進程的系統調用情況。
- ltrace:跟蹤進程調用庫函數的情況。
(三)範例2:
請使用while迴圈對下麵的腳本進行修改,使得當執行腳本時,每次執行完腳本以後不退出腳本了,而是繼續提示用戶輸入。
[root@centos6-kvm3 scripts]# cat 10-02.sh
#!/bin/bash
while true
do
read -t 15 -p "please input two number:" a b
expr $a + $b + 2 &>/dev/null
if [ $? -ne 0 ]
then
echo "usage:$0 please input two number."
continue
fi
if [ -z "$b" ]
then
echo "usage:$0 please input two number."
continue
fi
echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a/b=$(($a/$b))"
echo "a**b=$(($a**$b))"
echo "a%b=$(($a%$b))"
done
[root@centos6-kvm3 scripts]#
(四)範例3:
猜數字游戲。首先讓系統隨機生成一個數字,給這個數字定一個範圍(1-60),讓用戶輸入猜的數字,對輸入進行判斷,如果不符合要求,就給予高或低的提示,猜對後則給出猜對用的次數,請用while語句實現。
[root@centos6-kvm3 scripts]# cat 10-04.sh
#!/bin/bash
random=$((RANDOM%60))
count=0
while true
do
read -p "please input a num:" num
((count+=1))
if [ $random -lt $num ]
then
echo "你猜大了"
elif [ $random -gt $num ]
then
echo "你猜小了"
else
echo "你猜對了,NB!共計猜了${count}次!"
exit 1
fi
done
[root@centos6-kvm3 scripts]#
(五)範例4:
分析Apache訪問日誌(access_2010-12-8.log),把日誌中每行的訪問位元組數對應欄位數字相加,計算出總的訪問量。
[root@centos6-kvm3 scripts]# cat 10-05.sh
#!/bin/bash
sum=0
awk '{print $10}' access_2010-12-8.log | grep -v - >./oldboy.log
while read line
do
((sum=sum+line))
done <./oldboy.log
echo $sum
[root@centos6-kvm3 scripts]# sh 10-05.sh
1380681