shell条件测试操作 if分支 for循环 while 循环
目錄
?
條件測試操作
條件測試的基本用法:
字符串條件測試:
邏輯組合
數字的條件測試:
編寫一個腳本:
對文件進行測試:
if判斷語句
單分支
雙分支
多分支
編寫一個腳本:
編寫一個腳本:
for循環
while循環:可以無限循環
條件測試操作
條件測試的基本用法:
- "test ? 表達式"或者[ ?表達式 ? ?]都可以,表達式兩邊至少要留出一個空格
字符串條件測試:
-eq與==都有判斷是否相等的意思,區別是"=="主要用于 判斷字符串兩邊是否相等,而-eq主要用于判斷數字
[root@server0 opt]# [ 0123 == 123 ] [root@server0 opt]# echo $? 1 [root@server0 opt]# [ 0123 -eq 123 ] [root@server0 opt]# echo $? 0?
邏輯組合
邏輯與: ?&&?之前命令成功才會執行之后的命令
邏輯或: ? ||?之前命令失敗才會執行之后的命令
&& ? 前后任務都成功才算成功
|| ? ? ?前后有一個任務成功就算成功
[root@server0 opt]# vim test01.sh #!/bin/bash read -p "請輸入一個用戶名" a [ -z $a ] && echo "給我名字!" && exit #如果沒有輸入用戶名輸出"給我名字!"然后直接退出 useradd $a stty -echo read -p "請輸入密碼" p stty echo echo $p | passwd --stdin $a [root@server0 opt]# bash test01.sh 請輸入一個用戶名 給我名字! [root@server0 opt]# ls && ls && ls #三次都執行成功 rh test01.sh rh test01.sh rh test01.sh [root@server0 opt]# ls || ls || ls #只有第一個條件成功 rh test01.sh [root@server0 opt]# ls || ls && ls #第一個條件和第三個條件執行成功 rh test01.sh rh test01.sh [root@server0 opt]# ls && ls || ls #第一個條件和第二個條件執行成功 rh test01.sh rh test01.sh數字的條件測試:
| -eq | 等于 |
| -ne | 不等于 |
| -gt | 大于 |
| -ge | 大于等于 |
| -lt | 小于 |
| -le | 小于等于 |
編寫一個腳本:
每隔兩分鐘檢查主機的登錄賬戶數量,如果超過3人,則發郵件給管理員報警
[root@server0 opt]# vim test02.sh #!/bin/bash a=$(who | wc -l) #統計有幾個人登錄該賬戶 [ $a -gt 3 ] && echo "有人入侵!!!" | mail -s test root [root@server0 opt]# bash test02.sh可以多開幾個終端試一下[root@server0 opt]# mail Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 1 message 1 new >N 1 root Fri Jan 3 11:39 18/595 "test" & 1 Status: R有人入侵!!!Held 1 message in /var/spool/mail/root [root@server0 opt]# crontab -e */2 * * * * /opt/test02.sh #每隔兩分鐘執行該腳本 [root@server0 opt]# chmod +x test02.sh #一定要給腳本加權限!!!!![root@server0 opt]# rm -rf /var/spool/mail/root #可以先刪除所有郵件,該路徑為專門存放root用戶郵件 [root@server0 opt]# mail #查看郵件對文件進行測試:
| -e | 判斷對象是否存在(不管是文件還是目錄),存在則結果為真 |
| -d | 判斷對象是否為目錄,是則為真 |
| -f | 判斷對象是否為一般文件,是則為真 |
| -r | 判斷當前用戶對文件是否有讀權限 |
| -w | 判斷當前用戶對文件是否有寫權限 |
| -x | 判斷當前用戶對文件是否有執行權限 |
即使文件沒有任何權限,用管理員身份測試rwx權限,rw依舊為0,x為非0
if判斷語句
單分支
if ? 條件測試;then
? ? ?執行指令1
? ? ?執行指令2
? ? ? .......
fi?
雙分支
if ? 條件測試;then
? ? ?執行指令1
else
? ? 執行指令2? ?
fi
多分支
if ? 條件測試1;then
?? ? ?執行指令1
elif ? ?條件測試2;then
?? ? ?執行指令2
else
?? ? 執行指令n
fi
if雙分支:?
[root@server0 opt]# vim test03.sh #!/bin/bash if [ $USER == root ];thenecho "ok" elseecho "no" fi[root@server0 opt]# bash test03.sh ok [root@server0 opt]# su - student[student@server0 ~]$ cd /opt[student@server0 opt]$ bash test03.sh noif多分支:?
[root@server0 opt]# vim test04.sh #!/bin/bash read -p "請輸入數字" n if [ $n -gt 90 ];thenecho "優秀" elif [ $n -gt 70 ];thenecho "良好" elif [ $n -gt 60 ];thenecho "及格" elseecho "回爐" fi [root@server0 opt]# bash test04.sh 請輸入數字?
編寫一個腳本:
對某一個IP進行ping操作,可以使用變量(read ? 或 ? ?位置變量$1),方便多次使用腳本
ping命令: ?ping ?-c ?數字 ???指定ping的次數
?????????????? ? ping ??-i ???數字 ??指定ping的間隔時間,默認ping的間隔時間為1秒鐘
?????????????????ping ??-W ?數字 ??指定ping的時候不通反饋時間(秒),提高效率
[root@server0 opt]# vim test05.sh #!/bin/bash ping -c 3 -i 0.2 -W 1 172.25.0.12 &> /dev/null if [ $? -eq 0 ];thenecho "通了" elseecho "不通" fi [root@server0 opt]# bash test05.sh 不通編寫一個腳本:
猜數游戲,計算機出一個隨機的數字,你出一個數字,比計算機大則輸出猜大了,比計算機小則輸出猜小了,一樣則輸出恭喜你猜中了!
[root@server0 opt]# vim test06.sh #!/bin/bash for i in {1..20} do x=$[$RANDOM%10] read -p "請輸入一個數字(0-9)" n if [ $x -eq $n ];thenecho "恭喜,猜對了!"&& exit elif [ $n -lt $x ];thenecho "猜小了,想知道正確答案嗎,求我呀!" elseecho "猜大了,垃圾!" fi donefor循環
for ? 變量名稱 ? in ?值1 ?值2 ?值 3....
do ?
? ? ? ? 指令
done
[root@server0 opt]# vim test07.sh #!/bin/bash a=0 b=0 for i in `seq 15` #也可以寫成{1..15} doping -c 3 -i 0.1 -W 1 172.25.0.$i &> /dev/null if [ $? -eq 0 ];thenecho "172.25.0.$i通了"let a++ elseecho "172.25.0.$i不通"let b++ fi done [root@server0 opt]# bash test07.sh 172.25.0.1不通 172.25.0.2不通 172.25.0.3不通 172.25.0.4不通 172.25.0.5不通 172.25.0.6不通 172.25.0.7不通 172.25.0.8不通 172.25.0.9不通 172.25.0.10通了 172.25.0.11通了 172.25.0.12不通 172.25.0.13不通 172.25.0.14不通 172.25.0.15不通 2臺通了,13臺不通while循環:可以無限循環
while ? 條件測試
do ?
? ? ? ? ? 執行指令
done
[root@server0 opt]# vim test08.sh #!/bin/bash while : #冒號代表無限循環 doecho 123sleep 0.1 done?
?
總結
以上是生活随笔為你收集整理的shell条件测试操作 if分支 for循环 while 循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络拓扑实战1
- 下一篇: case分支 shell函数