Shell 既是一種命令語言,又是一種程序設計語言。作爲命令語言,它交互式地解釋和執行用戶輸入的命令;作爲程序設計語言,它定義了各種變量和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
Unix/Linux 上常見的 Shell 腳本解釋器有 bash、sh、csh、ksh 等,bash 是 Linux 標準默認的 shell,本文的shell程序都基bash 運行。
在本文中,將會介紹shell腳本的運算符、字符串操作、條件語句、循環語句、正則表達式等。
1.運算符
原生 bash 不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr最常用。
(1)算數運算符,看例子
#!/bin/bash
a=4
b=3
#加法運算
A=`expr $a + $b`
echo "A = $A"
#減法運算
A=`expr $a - $b`
echo "A = $A"
#乘法運算需要對*轉義
A=`expr $a \* $b`
echo "A = $A"
#除法運算
A=`expr $a / $b`
echo "A = $A"
#取餘運算
A=`expr $a % $b`
echo "A = $A"
注意:
1.表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2。
2.完整的表達式要被 ` ` 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。
(2)關係運算符
關係運算符只支持數字,看例子
#!/bin/bash
a=4
b=3
#-eq,檢測兩個數是否相等,相等返回true
if [ $a -eq $b ]
then
echo "$a = $b"
else
echo "$a != $b"
fi
#-ne,檢測兩個數是否相等,不相等返回true
if [ $a -ne $b ]
then
echo "$a != $b"
else
echo "$a = $b"
fi
#-gt,檢測左邊的數是否大於右邊,如果是,返回true
if [ $a -gt $b ]
then
echo "$a > $b"
else
echo "$a < $b"
fi
#-lt,檢測左邊的數是否小於右邊,如果是,返回true
if [ $a -lt $b ]
then
echo "$a < $b"
else
echo "$a > $b"
fi
#-ge,檢測左邊的數是否大於等於右邊,如果是,返回true
if [ $a -ge $b ]
then
echo "$a >= $b"
else
echo "$a < $b"
fi
#-le,檢測左邊的數是否小於等於右邊,如果是,返回true
if [ $a -le $b ]
then
echo "$a <= $b"
else
echo "$a > $b"
fi
另外判斷兩個數字是否相等,還可以用==和!=,如
#!/bin/bash
a=4
b=3
if [ $a == $b ]
then
echo "$a == $b"
else
echo "$a != $b"
fi
if [ $a == $b ]
then
echo "$a != $b"
else
echo "$a == $b"
fi
注意:條件表達式要放在方括號之間,並且要有空格,例如 [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]
另外還有布爾運算符、文件測試運算符、字符串運算符等。這裏大概說一下,詳細的教材大把,就不一一抄書了。
(3)布爾運算符
! | 非運算,表達式爲true則返回false,否則返回true | 類似C語言的 ! 運算符 |
-o | 或運算,有一個表達式爲true則返回true | 類似C語言的 || 運算符 |
-a | 與運算,兩個表達式都爲true才返回true | 類似C語言的 && 運算符 |
(4)字符串運算符
= | 檢測兩個字符串是否相等,相等返回true | if [ $a = $b ] |
!= | 檢測兩個字符串是否相等,不相等返回true | if [ $a != $b ] |
-n | 檢測字符串長度是否爲0,不爲0返回true | if [ -n $a ] |
-z | 檢測字符串長度是否爲0,爲0返回true | if [ -z $a ] |
str | 檢測字符串是否爲空,不爲空返回true | if [ $str ] |
注意:
判斷字符串相等(=)和判斷數字相等(==)的運算符是不一樣的
(4)文件測試運算符
-b | 檢測文件是否是塊設備文件,如果是則返回true | if [ -b $file ] |
-c | 檢測文件是否是字符設備文件,如果是則返回true | if [ -c $file ] |
-d | 檢測文件是否是目錄,如果是則返回true | if [ -d $file ] |
-f | 檢測文件是否是普通文件(不是目錄也不是設備文件),如果是則返回true | if [ -f $file ] |
-g | 檢測文件是否設置了SGID位,如果設置了返回true | if [ -g $file ] |
-k | 檢測文件是否設置粘着位(sticky bit),如果設置了返回true | if [ -k $file ] |
-p | 檢測文件是否是具名管道,如果是則返回true | if [ -p $file ] |
-u | 檢測文件是否設置了SUID位,如果設置了返回true | if [ -u $file ] |
-w | 檢測文件是否可寫,如果可寫返回true | if [ -w $file ] |
-x | 檢測文件是否可執行,如果可執行返回true | if [ -x $file ] |
-s | 檢測文件是否爲空,如果不爲空返回true | if [ -s $file ] |
-e | 檢測文件是否存在,如果存在返回true | if [ -e $file ] |
本文參考了某些書籍,如有侵權請聯繫博主刪除。