shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)
生活随笔
收集整理的這篇文章主要介紹了
shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- shell編程之條件語句
- 條件測試
- test命令
- 整數值測試
- free -m 提供了更簡潔的查看系統內存使用情況:
- 字符串和邏輯測試
- 字符串
- 邏輯測試
- 一元運算符,二元運算符和三元運算符
- if語句
- if單分支語句
- if雙分支語句(一看就懂)
- if多分支語句(一看就懂)
- case 命令
- 有趣小實驗
shell編程之條件語句
簡單的shell腳本程序中,各條語句將按先后順序依次執行,從而實現批處理的自動化過程。
條件測試
test命令
-d 測試是否為目錄(directory) -e 測試目錄或文件是否存在(Exist) -f 測試是否為文件(File) -r 測試當前用戶是否有權限讀取(Read) -w 測試當前用戶是否有權限寫入(Write) -x 測試當前用戶是否有權限執行(eXcute) [root@localhost ~]# mkdir ccc [root@localhost ~]# test -d ccc 測試是否是目錄 [root@localhost ~]# echo $? 0 是 [root@localhost ~]# test -f ccc 測試是否是文件 [root@localhost ~]# echo $? 1 不是 [root@localhost ~]# [ -d ccc ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ -f ccc ] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ -x ccc ] && echo "yes" yes [root@localhost ~]# [ -x ccc ] || echo "yes"整數值測試
-eq 等于(Equal) -ne 不等于(Not Equal) -gt 大于(Greater Than) -lt 小于(Lesser Than) -le 小于或等于(Lesser or Equal) -ge 大于或等于(Greater or Equal) [root@localhost ~]# [ 5 -gt 3 ] && echo “yes” “yes” [root@localhost ~]# [ 5 -lt 3 ] && echo “yes” [root@localhost ~]# [ 5 -eq 5 ] && echo “yes” “yes”free -m 提供了更簡潔的查看系統內存使用情況:
[root@localhost ~]# free -m 提供了更簡潔的查看系統內存使用情況:total used free shared buff/cache available Mem: 3770 160 3408 11 201 3366 Swap: 3967 0 3967Mem:表示物理內存統計 Swap:表示硬盤上交換分區的使用情況 total1: 表示物理內存總量。 used1: 表示總計分配給緩存(包含buffers 與cache )使用的數量,但其中可能部分緩存并未實 free1: 未被分配的內存。 shared1: 共享內存,一般系統不會用到,這里也不討論 buffers1: 系統分配但未被使用的buffers 數量。 cached1: 系統分配但未被使用的cache 數量。buffer 與cache 的區別見后面。 used2: 實際使用的buffers 與cache 總量,也是實際使用的內存總量。 free2: 未被使用的buffers 與cache 和未被分配的內存之和,這就是系統當前實際可用內存。字符串和邏輯測試
字符串
| = | 第一個字符串與第二個字符串內容相同 |
| != | 第一個字符串與第二個字符串內容不同,!號表示相反的意思 |
| -z | 檢查字符串內容是否為空,對于未定義或賦予空值的變量將視為空串 |
邏輯測試
| && | 而且”的意思 |
| || | 或者"的意思 |
| ! | 邏輯否 |
&&和&都是表示與,區別是&&只要第一個條件不滿足,后面條件就不再判斷。
用 || 時,左端為真,右端不需要進行運算,結果直接為真
但&&和 || 更為高效一點,可以減少不必要的運算
[root@xue ~]# [ 1 -ne 2 ] && echo "yes" yes [root@localhost opt]# [ -d /opt/zhangsan ] && echo "yes" yes一元運算符,二元運算符和三元運算符
let 命令
let 命令是 BASH 中用于計算的工具,用于執行一個或多個表達式,變量計算中不需要加上 $ 來表示變量。如果表達式中包含了空格或其他特殊字符,則必須引起來。
i=i++:先賦值在運算i=++i:先自加在賦值i=–i:先自減在賦值 [root@192 ~]# echo $i 1 [root@192 ~]# let i=++i [root@192 ~]# echo $i 2 [root@192 ~]# let i+=2 相當于i=i+2' [root@192 ~]# echo $i 4if語句
if單分支語句
單分支結構(基本格式) if 條件測試操作then 命令序列 fi實驗
[root@localhost ~]# vim text #!/bin/bsah read -p "請輸入目錄位置: " FILE if [ ! -d $FILE ]thenmkdir -p $FILE fi [root@localhost ~]# sh text 請輸入目錄位置: tesr [root@localhost ~]# lstesrif雙分支語句(一看就懂)
雙分支結構(基本格式) if 條件測試操作then 命令序列1語句塊1(條件成立)else 命令序列2語句塊2(條件不成立) fi ------------------------------- 搞笑解釋 如果(if) [你有房] 那么(then)我就嫁給你 否則(else)good bye! 果如實驗
if雙分支語句 [root@localhost ~]# vim text #!/bin/bsah read -p "請輸入目錄位置: " FILE if [ -e $FILE ]thenmkdir -p $ FILE mkdir的-p選項允許你一次性創建多層次的目錄elseecho "目錄已存在" fi [root@localhost ~]# sh text 請輸入目錄位置: 12 目錄已存在 判斷主機是否在線 [root@localhost ~]# vim 3.txt #!/bin/bash read -p "請輸入IP地址:" addr ping -c 3 -i 0.2 -W 3 $addr &> /dev/null 《《 意思是把 標準輸出 和 標準錯誤輸出 都重定向到黑洞里 if [ $? -eq 0 ]thenecho "$addr is up"elseecho "$addr is down" fi[root@localhost ~]# sh 3.txt 請輸入IP地址:192.168.136.244 192.168.136.244 is up -c:發送三個包 -i: 發包間隔0.2秒 -W:等待時間3秒if多分支語句(一看就懂)
多分支結構(基本格式) if 條件測試then 命令序列1語句塊1(條件成立) elif 條件測試操作2語句塊1(條件成立)then 命令序列2 else 命令序列3 fi -------------------------------------------- 搞笑解釋 如果(if) [你有房] 那么(then)我就嫁給你 或者(elif) [你爸是馬云] 那么(then)我就嫁給你 或者(eilf) [你很努力很吃苦] 那么(then)我們可以先談男女朋友 否則 (else)洗洗,早點睡吧 果如實驗
[root@xue ~]# vim grap.sh #!/bin/bash read -p "請輸入你的分數(0-100: " GRADEif [ $GRADE -ge 0 ] && [ $GRADE -le 100 ]thenif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]thenecho "$GRADE分,優秀" elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]thenecho "$GRADE分,合格"elseecho “不合格”fiecho "請輸入(0-100)區間 "fi[root@xue ~]# sh grap.sh 請輸入你的分數(0-100: 111 請輸入(0-100)區域指!case 命令
case 語句和 if…elif…else 語句一樣都是多分支條件語句,不過和多分支 if 條件語句不同的是,case 語句只能判斷一種條件關系,而 if 語句可以判斷多種條件關系。
格式 case $ake in[a-z]|[A-Z])echo "你的字母";;[0-9])echo "你的字母";;……*)echo "你的字母" esac [root@localhost ~]# vi pinghost.sh read -p "請輸入(0-100) 成績: " score case $score in8[5-9]|9[0-9]|100)echo "成績優秀";;7[0-9]|8[0-4])echo "成績良好";;6[0-9])echo "成績合格";; *)echo "成績不合格" esac有趣小實驗
競速比賽10秒進決賽,分男子組和女子
[root@xue ~]# sh run.sh #!/bin/bash #競速比賽10秒進決賽,分男子組和女子組 read -p "請輸入你的成績" numif [ $num -ge 0 ]&&[ $num -le 10 ];thenread -p "請輸入你的性別" sexif [ $sex = 男 ];thenecho "成績合格,進入男子組"elif [ $sex = 女 ];thenecho "成績合格,進入女子組 "else echo "請輸入正確信息"fielse echo "成績不及格,你被淘汰" fi [root@xue ~]# sh run.sh 請輸入你的成績10 請輸入你的性別男 成績合格,進入男子組總結
以上是生活随笔為你收集整理的shell编程之条件语句(文件测试,test命令,字符串和逻辑测试,if单支语句,if双支语句,if多支语句,case命令,用if写跑步小实验)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4GB内存条性能对比:宇瞻稳定流畅,超越
- 下一篇: cobbler网络装机