文章目錄
- 一、條件測驗操作
- (一)、 條件測驗操作
- 1、test命令
- (二)、檔案測驗
- 1、檔案測驗基本格式
- 2、常見的測驗運算子
- (三)、整數測驗
- 1、整數值比較
- 2、常用的測驗運算子
- (四)、字串測驗
- 1、字串比較
- (五)、邏輯測驗
- 1、基本格式
- 2、常用的測驗運算子
- 二:if陳述句
- (一)、if單分支陳述句
- (二)、if雙分支陳述句
- (三)、if多分支陳述句
- (四)、if陳述句實操演示
- 1、單分支if陳述句
- 2、多分支if陳述句
- 三、case陳述句
- (一)、case多分支陳述句
- 1、case陳述句的結構
- (二)、case陳述句實操:
一、條件測驗操作
(一)、 條件測驗操作
1、test命令
測驗特定的運算式是否成立,當條件成立,測驗陳述句的回傳值為0,否則為其他數值
格式1:test 條件運算式
格式2:[ 條件運算式 ] (條件運算式的兩邊都需要有空格,且此方法更為常用)
(二)、檔案測驗
1、檔案測驗基本格式
[ 運算子 檔案或目錄 ] (注意兩端要有空格)
&? 回傳0表示條件成立,回傳非零值表示條件不成立
&& 邏輯與,"而且"的意思
|| 邏輯或,"或者"的意思
2、常見的測驗運算子
| 常見的測驗運算子 | 解釋 |
|---|---|
| -d | 測驗是否為目錄(directory) |
| -e | 測驗目錄或檔案是否存在(Exist) |
| -f | 測驗是否為檔案(File) |
| -r | 測驗當前用戶是否有權限讀取(Read) |
| -w | 測驗當前用戶是否有權限寫入(Write) |
| -x | 測驗當前用戶是否有權限執行(eXcute) |
舉例:
[root@localhost ~]#[ -f 111.txt ] #測驗111.txt這個檔案是否成立
[root@localhost ~]#echo $? #上一條命令執行后回傳的狀態,當回傳狀態值為0時表示執行正常,非0值表示執行例外或出錯
0 #回傳為0,說明運算式執行正常
[root@localhost ~]#[ -f 111.txt ] && echo "yes" #也可以使用&&這個符號在后面帶上陳述句,當&&前面的陳述句執行成功以后,才會繼續執行&&后面的陳述句,否則不會執行&&后面的陳述句,
yes
[root@localhost ~]#touch 222 #創建一個222的目錄
[root@localhost ~]#ls
111.txt anaconda-ks.cfg name.sh 公共 視頻 檔案 音樂
222 initial-setup-ks.cfg nnn.sh 模板 圖片 下載 桌面
[root@localhost ~]#[ -f man ] #測驗man是否為檔案
[root@localhost ~]#echo $? #執行上一條命令后回傳狀態
1 #回傳為1,說明執行例外
[root@localhost ~]#test -f man #同樣也可以使用test命令進行測驗,test與[]的作用相同
[root@localhost ~]#echo $?
1
(三)、整數測驗
1、整數值比較
命令基本格式
[ 整數1 運算子 整數2 ]
2、常用的測驗運算子
| 運算子 | 解釋 |
|---|---|
| -eq | 等于(Equal) |
| -ne | 不等于(Not Equal) |
| -gt | 大于(Greater Than) |
| -lt | 小于(Lesser Than) |
| -le | 小于或等于(Lesser or Equal) |
| -ge | 大于或等于(Greater or Equal) |
舉例:
[root@localhost ~]#who #查看此臺主機有多少用戶正在登錄
root pts/0 2020-12-16 13:58 (192.168.200.1)
[root@localhost ~]#who | wc -l #加上| 符號后使用wc -l命令可以顯示登錄的用戶數
1
[root@localhost ~]#[ $(who | wc -l) -gt 0 ] && echo "too many" #使用“[]”測驗陳述句,當正在登錄的用戶“-gt”(表示大于) 0時,&&(表示輸出) 輸出too many ,$(who | wc -l )表示呼叫()中的變數的結果,
too many #輸出結果為too many
[root@localhost ~]#[ $(who | wc -l) -ge 5 ] && echo ">=5" #當登錄的用戶大于等于5時,輸出>=5,否則不輸出,
[root@localhost ~]#free #顯示當前的記憶體的容量,Men表示物理記憶體,Swap表示虛擬記憶體
total used free shared buff/cache available
Mem: 1867024 314892 1091840 9256 460292 1334460
Swap: 4194300 0 4194300
[root@localhost ~]#free -m #使用-m表示以M(兆)為單位顯示
total used free shared buff/cache available
Mem: 1823 307 1066 9 449 1303
Swap: 4095 0 4095
[root@localhost ~]#free -h #-h 表示以更人性化的方式顯示,該選項只有在centos7以上的版本才有用
total used free shared buff/cache available
Mem: 1.8G 307M 1.0G 9.0M 449M 1.3G
Swap: 4.0G 0B 4.0G
#Awk工具介紹
Awk是一個功能強大的編輯工具,用于在Linux/UNIK下對文本和資料進行處理,資料可以來自一個或多個檔案,也可以為其他命令的輸出,常作為腳本來使用,在執行操作時,Awk逐行讀取文本,默認以空格為分割符進行分隔,將分隔所得的各個欄位保存在內建變數中,對比改行是否與給定的模式相匹配,并按模式或者條件執行編輯命令,也可以從腳本中呼叫編輯指令過濾輸出相應內容,
[root@gcc ~]#free -m
total used free shared buff/cache available
Mem: 1823 281 1177 9 364 1347
Swap: 4095 0 4095
[root@gcc ~]#free -m | grep "Mem:" | awk '{print $4}' #將free -m中的結果中的Mem過濾出來,并列印出第四列的內容,第四列是free的內容
1177
[root@gcc ~]#abc=$(free -m | grep "Mem:" | awk '{print $4}') #接著將上面的一段變數賦值給abc,然后就可以直接呼叫變數名就可以查看變數值了,
[root@gcc ~]#echo $abc
1177
[root@gcc ~]#[ $abc -lt 1200 ] && echo "當前記憶體為${abc}MB,請及時清理!" #使用“[]”判斷陳述句,判斷記憶體是否 -lt(表示小于)1200MB,注意,后面的echo輸出中的陳述句在$abc前后需要加上{},因為我們之定義了這一個變數,不加{}就連著后面的MB作為一個整體,就不是一個變數名了,
當前記憶體為1177MB,請及時清理! #根據上面的判斷陳述句顯示出來的結果
[root@gcc ~]#free -m | grep "Mem:" | awk '{print $3/$2}' #使用awk進行除法運算,算出使用率, $3是空閑記憶體,$2是total總記憶體
0.154142
補充:浮點運算,即小數點運算,使用 bc 命令
[root@gcc ~]#echo "1.1 + 2.2" | bc #使用bc進行浮點型運算,此處+兩邊可以加空格也可以不加
3.3
[root@gcc ~]#echo "1.1 + 2.2" > 12.txt #將算式賦值給12.txt文本
[root@gcc ~]#cat 12.txt
1.1 + 2.2
[root@gcc ~]#bc 12.txt #可以直接使用bc運算12.txt的文本中的內容
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3.3 #該處是運算的結果
^C
(interrupt) Exiting bc.
[root@gcc ~]#cat 12.txt | bc #也可以使用cat | bc 運算
3.3
[root@gcc ~]#echo $(awk BEGIN'{print 1.1+2.2}') #也可以使用awk BEGIN進行浮點運算
3.3
(四)、字串測驗
1、字串比較
常用的格式:
格式一:[ 字串1 = 字串2 ]
[ 字串1 != 字串2 ]
格式二:[ -z 字串 ]
2、常用的測驗運算子:
| 常用的測驗運算子 | 解釋 |
|---|---|
| = | 第一個字串與第二個字串內容相同 |
| != | 第一個字串與第二個字串內容不同,!號表示相反的意思 |
| -z | 檢查字串內容是否為空,對于未定義或賦予空值的變數將視為空串 |
| -n | 檢測字串是否存在 |
舉例:
[root@gcc ~]#read -p "思聰是不是姓王:yes/no" ack #從鍵盤輸入內容為變數賦值,變數名為ack
思聰是不是姓王:yes/noyes
[root@gcc ~]#echo $ack
yes
[root@gcc ~]#[ $ack = "yes" ] && echo "王思聰" #使用判斷陳述句,使用=表示左右兩邊相等,然后輸出字串“王思聰”
王思聰
[root@gcc ~]#[ $ack != "no" ] && echo "李思聰" #測驗運算子!=兩邊表示不相等,判斷師傅不相等,然后輸出“李思聰”
李思聰
(五)、邏輯測驗
1、基本格式
格式一: [ 運算式1 ] 運算子 [ 運算式2 ] ...
格式二: 命令1 運算子 命令2 ...
2、常用的測驗運算子
| 常用的測驗運算子 | 解釋 |
|---|---|
| && | 邏輯與,“而且”的意思,使用test命令測驗時,可將“&&”改為“-a” |
|| | 邏輯或,“或者”的意思,使用test命令測驗時,可將“||”改為“-o” |
| ! | 邏輯否 |
注意:&&符號不可以在一個[]中使用,但是可以在兩個[]之間使用
舉例:
[root@gcc ~]#a=5
[root@gcc ~]#[ $a -ne 1 ] && [ $a -lt 8 ] #在兩個[]之間可以使用&&
[root@gcc ~]#echo $?
0
[root@gcc ~]#[ $a -ne 1 && $a -lt 8 ] #而在一個[]之間不可以使用&&
-bash: [: 缺少 `]'
[root@gcc ~]#[[ $a -ne 1 && $a -lt 8 ]] #但是改成兩個[]就可以使用&&
[root@gcc ~]#echo $?
0
[root@gcc ~]#[ $a -ne 1 ] -a [ $a -lt 8 ] #在兩個[]之間不可以使用 -a
-bash: [: 引數太多
[root@gcc ~]#[ $a -ne 1 -a $a -lt 8 ] #-a 只可以在一個[]之間使用
[root@gcc ~]#echo $?
0
[root@gcc ~]#[ $a -eq 5 ] && echo true || echo fale #使用||判斷前面的條件是否成立,成立輸出true,不成立輸出flase
true
[root@gcc ~]#[ $a -ne 5 ] && echo true || echo fale
fale
二:if陳述句
(一)、if單分支陳述句
單分支結構(基本格式):
if 條件測驗操作
then 命令序列
fi
單分支結構(舉例):
if 磁盤已用空間>80%
then 報警
fi

(二)、if雙分支陳述句
雙分支結構(基本格式):
if 條件測驗操作
then 命令序列1
else 命令序列2
fi
雙分支結構(舉例):
if 80埠是否在監聽
then 網站服務已在運行
else 啟動httpd服務
fi

(三)、if多分支陳述句
多分支結構(基本格式):
if 條件測驗操作1
then 命令序列1
elif 條件測驗操作2
then 命令序列2
else
命令序列3
fi
多分支結構(舉例):
if 分數為85~100之間
then 判為優秀
elif 分數為70~84之間
then 判為合格
else
判為不合格
fi

(四)、if陳述句實操演示
1、單分支if陳述句
判斷大小
vim a.sh
if [ 3 -gt 2 ] #如果3大于2
then #成立的話
echo "OK" #輸出OK
fi #結束
---------或者if陳述句可以寫成-----------
if [ 3 -gt 2 ];then echo "OK"; fi
----------或者還可以寫成--------------
[ 3 -gt 2 ] && echo "OK"
----------------------------------------------
[root@gcc ~]#sh a.sh #運行腳本
OK #輸出結果
2、多分支if陳述句
判斷成績是否合格
vim b.sh
#!/bin/bash
read -p "請輸入你的分數(0-100):" score
if [ $score -ge 85 ] && [ $score -le 100 ]
then
echo "$score 分,優秀!"
elif [ $score -ge 70 ] && [ $score -le 84 ]
then
echo "$score 分,合格!"
else
echo "$score 分,不合格!"
fi
[root@gcc ~]#sh b.sh
請輸入你的分數(0-100):90
90 分,優秀!
[root@gcc ~]#sh b.sh
請輸入你的分數(0-100):50
50 分,不合格!
[root@gcc ~]#sh b.sh
請輸入你的分數(0-100):80
80 分,合格!
三、case陳述句
(一)、case多分支陳述句
1、case陳述句的結構
針對變數額不同取值,分別執行不同的命令序列
這種情況與多分支的if陳述句非常相似,只不過if陳述句需要判斷多個不同的條件,而case陳述句指示判斷一個變數的不同取值
case行尾必須為單詞“in”,每一模式必須以右括號“)”結束,
雙分號“;;”表示命令序列的結束,
模式字串中,可以用方括號表示一個連續的范圍,如“[0-9]”;還可以用豎杠符號“|”表示“或”,如“A|B”.
zuihou dde ")"表示默認模式,其中的相當于通配符,
格式:
case 變數值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
....
*)
默認命令序列
esac
舉例:
case 分數 in
85~100)
評為優秀
;;
70~84)
評為合格
;;
....
*)
判為不合格
esac

(二)、case陳述句實操:
判斷分數是否及格
[root@gcc ~]#vim socre.sh
[89][0-9]|100) #這邊表示的是從80分到100分,兩位數的時候需要把十位和個位分開寫,[89]表示十位上的8和9,[0-9]表示各位上的0-9,“|”表示或的意思,
echo "$NUM,秀兒"
;; #固定格式
[67][0-9]) #表示從60分到79分
echo "$NUM,soso"
;;
[0-5][0-9]|[0-9]) #表示0到59分 ,“|”前面的表示從00-59,后面的表示0-9.
echo "$NUM,努力"
;;
*) #表示除0-100以外的任何字符
echo "輸入有誤!"
esac #結束陳述句
[root@gcc ~]#chmod +x socre.sh
[root@gcc ~]#./socre.sh
請輸入你的分數:80
80,秀兒
[root@gcc ~]#./socre.sh
請輸入你的分數:60
60,soso
[root@gcc ~]#./socre.sh
請輸入你的分數:15
15,努力
[root@gcc ~]#./socre.sh
請輸入你的分數:100000
輸入有誤!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236685.html
標籤:其他
