文章目錄
- 一、條件語句
- 測試
- 比較整數數值
- 字符串比較
- 邏輯運算
- 雙中括號
- ( ){ }
- if語句結構
- case語句
- 二、循環語句
- 基礎知識
- for循環
- while
- until
- 雙重循環及跳出循環
一、條件語句
測試
條件測試:判斷某需求是否滿足,需要由測試機制來實現,專用的測試表達式需要由測試命令輔助完成。測試過程,實現評估布爾聲明,以便用在條件性環境下進行執行。
若真,則狀態碼變量 $? 返回0
若假,則狀態碼變量 $? 返回1
格式:
1.test 條件表達式
2.[ 條件表達式 ](注意大括號前后需要空格)
測試使用echo$? 的返回值來判斷是否成功。
操作符:
- -d:測試是否為目錄(Directory)
- -e:測試目錄或文件是否存在(Exist)
- -a:測試目錄或文件是否存在(Exist)
- -f:測試是否為文件(File)
- -r:測試當前用戶是否有權限讀取(Read)
- -w:測試當前用戶是否有權限寫入(Write)
- -x:測試當前用戶是否有權限執行(eXcute)
- -L: 測試是否為軟連接文件
屬性測試補充:
-s FILE #是否存在且非空
-t fd #fd 文件描述符是否在某終端已經打開
-N FILE #文件自從上一次被讀取之后是否被修改過
-O FILE #當前有效用戶是否為文件屬主
-G FILE #當前有效用戶是否為文件屬組
比較整數數值
[ 整數1 -操作符 整數2 ]
- -eq:第一個數等于(Equal)第二個數
- -ne:第一個數不等于(Not Equal)第二個數
- -gt:第一個數大于(Greater Than)第二個數
- -lt:第一個數小于(Lesser Than)第二個數
- -le:第一個數小于或等于(Lesser or Equal)第二個數
- -ge:第一個數大于或等于(Greater or Equal)第二個數
字符串比較
常用的測試操作符
- =:字符串內容相同
- !=:字符串內容不同,! 號表示相反的意思
- -z:字符串內容為空
- -n: 字符是否存在
格式
[ 字符串1 = 字符串2 ] 是否相同
[ 字符串1 != 字符串2 ] 是否不相同
[ -z 字符串 ] 是否為空
[ -n 字符串 ] 字符是否存在
邏輯運算
- -a或&&:邏輯與,“而且”的意思全真才為真
- -o或||:邏輯或,“或者”的意思一真即為真
- !:邏輯否
cmd1 操作符 cmd2
組合用法
( cmd1 && cmd2) || cmd3
cmd1 成功 會執行cmd2 不執行cmd3
cmd1 不成功 會執行cmd3
雙中括號
[[ ]]
== 左側字符串是否和右側的字符串相同
注意:此表達式用于[[ ]]中,字符串為通配符
=~ 左側字符串是否能夠被右側的正則表達式的字符串所匹配
重點注意正則表達式和通配符的區別
( ){ }
(CMD1;CMD2;…)和 { CMD1;CMD2;…; } 都可以將多個命令組合在一起,批量執行。
兩者最大的不同點: 用( )執行多條程序時,會開啟字shell,即在新的bash環境下,而{ }則是在當前bash環境下。
if語句結構
分支結構
1.單分支
if 判斷條件;
then 條件為真的分支代碼
fi
注意: if······fi 主體結構,注意分號是英文格式
2.雙分支
if 判斷條件; then
條件為真的分支代碼
else
條件為假的分支代碼
fi
3.多分支
if 判斷條件1
then
條件1為真的分支代碼
elif 判斷條件2
then
條件2為真的分支代碼
elif 判斷條件3;then
條件3為真的分支代碼
…
else
以上條件都為假的分支代碼 托底
fi
case語句
基本格式
read -p i #從屏幕輸入條件case $i in
PAT1) #滿足分支1條件則執行分支1的程序分支1;;
PAT2)分支2;;
...
*)默認分支;;
二、循環語句
基礎知識
echo
echo -n 表示不換行輸出
echo -e 表示輸出轉義符
選項 | 作用 |
---|---|
\r | 光標移至行首,并且不換行 |
\s | 當前shell的名稱,如bash |
\t | 插入Tab鍵,制表符 |
\n | 輸出換行 |
\f | 換行,但光標仍停留在原處 |
\ | 表示插入"\"本身轉義 |
\b | 表示退格 不顯示前一個字符 |
\c | 抑制更多的輸出或不換行 |
退格刪除前面的字符
注意:退格鍵和末尾的字符相關,超過末尾的字符數量會出現bug
date
date查看當前系統時間
-d 你描述的日期,顯示指定字符串所描述的時間,而非當前時間
%F 完整日期格式,等價于 %Y-%m-%d
% T 時間(24小時制)(hh:mm:ss)
for循環
循環含義:將某段代碼重復運行多次,通常有進入循環的條件和退出循環的條件 。
常見的循環的命令:for;while;until
for用于已知循環次數;until、while用于循環次數未知。
列表循環
語法:
for 變量名 in {list}
do
命令
done
花括號{ }和seq在for循環中的應用
for i in {1..50..2} 1-50的奇數
for i in {2..50..2} 1-50的偶數
for i in {10..1} 1-10倒序排列for i in $(seq 10) 1-10正序排列
for i in $(seq 10 -1 1) 1-10倒序排列
for i in $(seq 1 2 10) 1-10的奇數,中間為步長
不帶列表循環
for 變量名
do
命令
done
腳本中沒有變量參數,需要在執行的時候手動傳參。
類似于c語言風格的for循環
for (( 表達式1; 表達式2; 表達式3 )); do 命令; done
for ((expr1;expr2;expr3))
do
命令
done
expr1:定義變量并賦初值
expr2:決定是否循環
expr3:決定循環變量如何改變,決定循環什么時候退出
while
相對于for,需要知道循環次數,但有些時候并不能知道循環次數。我們只知道停止條件,不知道次數,就需要用到while循環。直到達到條件。
while循環
1.語法結構
2.死循環
while循環一般用于有條件判斷的循環,若判斷條件為真,則進入循環,當然條件為假就跳出循環。
語法:
while 條件
do
命令
done
死循環
while 后面跟的條件為一定正確的,一般為true或者[ 1 -eq 1];這樣命令會一直執行。
until
until循環和while循環類似,但區別在于while循環在條件為真時繼續執行循環,而until則是在條件為假時執行循環。
雙重循環及跳出循環
- break跳出單個循環 break n 數字數字是幾代表跳出n層循環
- continue終止某次循環中的命令,但是不會完全終止命令
- exit 直接退出腳本
continue終止某次循環的命令;終止i=5。
break跳出一層循環;
break跳出兩層循環;
exit直接退出腳本;