1. 程式人生 > >《Linux就該這麽學》第四章筆記

《Linux就該這麽學》第四章筆記

測試 程序 nag 控制字符 toolbar under exists $? onos

4.2 編寫Shell腳本

4.2.3 判斷用戶的參數

技術分享圖片

Shell腳本中的條件測試語法可以判斷表達式是否成立,若條件成立則返回數字0,否則便返回其他隨機數值。

&& 當前面的命令成立時,執行後面的語句;

|| 當前面個的命令不成立時,執行後main的語句;

! 表示把條件測試中的判斷結果取相反值;

*可用的整數比較運算符*

操作符

作用

-eq

是否等於

-ne

是否不等於

-gt

是否大於

-lt

是否小於

-le

是否等於或小於

-ge

是否大於或等於

[root@linuxprobe ~]# [ 10 -gt 10 ]
[root@linuxprobe ~]# echo $?
1
[root@linuxprobe ~]# [ `free -m | grep Mem: | awk '{print $4}'` -le 1024 ] && echo "Error" || echo "OK" 
OK


4.3 流程控制語句

4.3.1 if條件測試語句

技術分享圖片

[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is On-line."
else
echo "Host $1 is Off-line."
fi


技術分享圖片

[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail" 
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh 
Enter your score(0-100):80
80 is Pass


4.3.2 for條件循環語句

技術分享圖片


[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done

註:/dev/null是一個被稱作Linux黑洞的文件,把輸出信息重定向到這個文件等同於刪除數據(類似於沒有回收功能的垃圾箱),可以讓用戶的屏幕窗口保持簡潔。

技術分享圖片


[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail" 
fi
[root@linuxprobe ~]# bash chkscore.sh
Enter your score(0-100):88
88 is Excellent
[root@linuxprobe ~]# bash chkscore.sh 
Enter your score(0-100):80
80 is Pass


4.3.2 for條件循環語句

技術分享圖片

[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done


4.3.3 while條件循環語句

while條件循環語句:讓腳本根據某些條件來重復執行命令的語句,它的循環結構往往在執行前並不確定最終執行的次數;

for循環語句:用在有目標、有範圍的使用場景。

技術分享圖片

[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品實際價格為0-999之間,猜猜看是多少?"
while truedo
read -p "請輸入您猜測的價格數目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答對了,實際價格是 $PRICE"
echo "您總共猜測了 $TIMES 次"
exit 0
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done

expr 用於計算;


4.3.4 case條件測試語句

技術分享圖片

[root@linuxprobe ~]# vim Checkkeys.sh
#!/bin/bash
read -p "請輸入一個字符,並按Enter鍵確認:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您輸入的是 字母。"
;;
[0-9])
echo "您輸入的是 數字。"
;;
*)
echo "您輸入的是 空格、功能鍵或其他控制字符。"
esac
[root@linuxprobe ~]# bash Checkkeys.sh
請輸入一個字符,並按Enter鍵確認:6
您輸入的是 數字。
[root@linuxprobe ~]# bash Checkkeys.sh
請輸入一個字符,並按Enter鍵確認:p
您輸入的是 字母。
[root@linuxprobe ~]# bash Checkkeys.sh
請輸入一個字符,並按Enter鍵確認:^[[15~
您輸入的是 空格、功能鍵或其他控制字符。


4.4 計劃任務服務程序

4.4.1 at命令

一次性計劃任務只執行一次,一般用於滿足臨時的工作需求。在使用at命令來設置一次性計劃任務時,默認采用的是交互式方法。

命令形式:at 時間;

"at -l”命令:查看已設置好但還未執行的一次性計劃任務

“atrm 任務序號" :刪除計劃任務;


[root@linuxprobe ~]# echo "systemctl restart httpd" | at 23:30
job 4 at Mon Apr 27 23:30:00 2015
[root@linuxprobe ~]# at -l
3 Mon Apr 27 23:30:00 2016 a root
4 Mon Apr 27 23:30:00 2016 a root

[root@linuxprobe ~]# atrm 3  #刪除job 3
[root@linuxprobe ~]# at -l
4 Mon Apr 27 23:30:00 2016 a root


4.4.2 crontab命令

技術分享圖片

crond服務設置任務的參數格式口訣“分、時、日、月、星期 命令”

*使用crond設置任務的參數字段說明*

字段說明
分鐘取值為0~59的整數
小時取值為0~23的任意整數
日期取值為1~31的任意整數
月份取值為1~12的任意整數
星期取值為0~7的任意整數,其中0與7均為星期日
命令要執行的命令或程序腳本

[root@linuxprobe ~]# crontab -e  #編輯新建任務,調用VIM編輯器進行任務編輯,可以使用#寫註釋
no crontab for root - using an empty one
crontab: installing new crontab
[root@linuxprobe ~]# crontab -l  #查看
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
[root@linuxprobe ~]# crontab -r  #刪除任務

註:除了用逗號(,)來分別表示多個時間段,例如“8,9,12”表示8月、9月和12月。還可以用減號(-)來表示一段連續的時間周期(例如字段“日”的取值為“12-15”,則表示每月的12~15日)。以及用除號(/)表示執行任務的間隔時間(例如“*/2”表示每隔2分鐘執行一次任務)。


《Linux就該這麽學》第四章筆記