測試命令
格式1:test 條件表達式
格式2:[條件表達式]
test命令和 [ ] 相同,建議使用[ ]
#方框中要空格
#用test可能會不小心定義變量
文件測試
常見的測試操作符 | 含義 |
---|---|
-d | 檢查文件是否存在且為目錄 |
-f | 檢查文件是否存在且為常規文件 |
-L | 測試是否為軟連接文件 |
-r | 測試當前用戶是否有讀取權限 |
-w | 測試當前用戶是否有寫入權限 |
-x | 測試當前用戶是否有執行權限 |
-e | 測試文件是否存在 |
屬性測試 | |
---|---|
-s FILE | 是否存在且非空 |
-t 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 | 字符是否存在 |
#!/bin/bash
read -p "請做出你的選擇:" choiceif [ $choice = "123" ]
then
echo "a"
else
echo "cc"
fi[root@localhost data]# bash cs.sh
請做出你的選擇:123
a
邏輯測試
操作符 | 含義 |
---|---|
-a或&& | 邏輯與,全真才為真 |
-o | 邏輯或,一真即為真 |
i | 邏輯否 |
邏輯與&&
CMD1 && CMD2
同時滿足命令1 和命令2 的要求 才會返回正確 ,輸出命令2的結果
全真才為真 一假即為假
第一個CMD1結果為真 ,第二個CMD2必須要參與運算,才能得到最終的結果
第一個CMD1結果為假 ,總的結果必定為假,因此不需要執行CMD2
邏輯或||
CMD1 || CMD2
命令1滿足要求,直接輸出命令1的結果,不需要命令2參與
如果命令1不滿足要求,命令2滿足,會輸出命令2的結果
一真即為真 第一個CMD1結果為真 (1),總的結果必定為1,因此不需要執行CMD2 第一個CMD1結果為假 (0),第二個CMD2 必須要參與運算,才能得到最終的結果
組合應用
用法只有一個
CMD1 && CMD2 || CMD3
短路與必須在短路或前
if語句
單分支結構
#單分支格式if [ 判斷條件 ]
then ; echo " "
else
echo " "
fi
# if 和 fi要對應
多分支結構
#多分支格式if [ 判斷 ]
then
echo " "
elif[ ] #可以無限elif
if
...fielse #以上條件都為假
echo " "fi
# if 和 fi要對應
#!/bin/bash# 定義一個變量
read -p "請輸入你的年齡:" age if [ $age -ge 18 ]
thenecho "你已經成年了!"
elseecho "你還未成年!"
fi
[root@localhost data]# bash nl.sh
請輸入你的年齡:18
你已經成年了!
[root@localhost data]# bash nl.sh
請輸入你的年齡:12
你還未成年!
#!/bin/bash
read -p "請輸入你的輸入分數(0-100):" numif [ $num -ge 85 -a $num -le 100 ]
then
echo "你真厲害"
elif [ $num -ge 70 -a $num -le 84 ]
then
echo "你很棒了"
elif [ $num -ge 0 -a $num -lt 70 ]
then
echo "你仍需努力"
else
echo "你輸錯了,重新輸"bash $0fi[root@localhost data]# bash gl.sh
請輸入你的輸入分數(0-100):100
你真厲害
[root@localhost data]# bash gl.sh
請輸入你的輸入分數(0-100):80
你很棒了
[root@localhost data]# bash gl.sh
請輸入你的輸入分數(0-100):60
你仍需努力
[root@localhost data]# bash gl.sh
請輸入你的輸入分數(0-100):120
你輸錯了,重新輸
請輸入你的輸入分數(0-100):0
你仍需努力
case語句
結構
case 變量名 in
case支持glob風格的通配符: * 任意長度任意字符
? 任意單個字符
[0-9] 指定范圍內的任意單個字符
| 或者,如: a|b
#!/bin/bash# 定義一個變量
read -p "這是什么水果:" fruitcase $fruit in"apple")echo "這是一個蘋果";;"orange")echo "這是一個橘子";;"banana")echo "這是一個香蕉";;*)echo "這是其他水果";;
esac[root@localhost data]# bash sg.sh
這是什么水果:apple
這是一個蘋果
[root@localhost data]# bash sg.sh
這是什么水果:1234
這是其他水果
echo命令
echo -n 表示不換行輸出
echo -e 表示輸出轉義符
選項 | 作用 |
---|---|
\r | 光標移動至行首,并且不換行 |
\s | 當前shell的名稱 |
\t | 插入TAB鍵 |
\n | 輸出換行 |
\f | 換行 |
\ | 表示插入“\”本身的轉義 |
\b | 表示退格 |
\c | 抑制更多的輸出或不換行 |
echo -e "n\n\n\n\n\nw" | fdisk /dev/sdb
#自動磁盤分區