1. 關於檔案與目錄的偵測邏輯卷標!
-f 常用!偵測『檔案』是否存在 eg: if [ -f filename ]
-d 常用!偵測『目錄』是否存在
-b 偵測是否為乙個『 block 檔案』
-c 偵測是否為乙個『 character 檔案』
-s 偵測是否為乙個『 socket 標籤檔案』
-l 偵測是否為乙個『 symbolic link 的檔案』
-e 偵測『某個東西』是否存在!
2. 關於程式的邏輯卷標!
-g 偵測是否由 gid 所執行的程式所擁有
-o 偵測是否由 uid 所執行的程式所擁有
-p 偵測是否為程式間傳送資訊的 name pipe 或是 fifo (老實說,這個不太懂!)
3. 關於檔案的屬性偵測!
-r 偵測是否為可讀的屬性
-w 偵測是否為可以寫入的屬性
-x 偵測是否為可執行的屬性
-s 偵測是否為『非空白檔案』
-u 偵測是否具有『 suid 』的屬性
-g 偵測是否具有『 sgid 』的屬性
-k 偵測是否具有『 sticky bit 』的屬性
4. 兩個檔案之間的判斷與比較;例如[ test file1 -nt file2 ]
-nt 第乙個檔案比第二個檔案新
-ot 第乙個檔案比第二個檔案舊
-ef 第乙個檔案與第二個檔案為同乙個檔案( link 之類的檔案)
5. 邏輯的『和(and)』『或(or)』
&& 邏輯的 and 的意思
|| 邏輯的 or 的意思
運算符號 代表意義
= 等於 應用於:整型或字串比較 如果在 中,只能是字串
!= 不等於 應用於:整型或字串比較 如果在 中,只能是字串
< 小於 應用於:整型比較 在 中,不能使用 表示字串 > 大於應用於:整型比較 在 中,不能使用 表示字串
-eq 等於 應用於:整型比較
-ne 不等於 應用於:整型比較
-lt 小於 應用於:整型比較
-gt 大於 應用於:整型比較
-le 小於或等於 應用於:整型比較
-ge 大於或等於 應用於:整型比較
-a 雙方都成立(and) 邏輯表示式 –a 邏輯表示式
-o 單方成立(or) 邏輯表示式 –o 邏輯表示式
-z 空字串
-n 非空字串
所以你的迴圈條件部分寫成這樣才是對的:
while [ "$" -lt 5 ]; do
注意在條件檢測中把變數名引起來的雙引號不能省略,這個地方如果將來是字串的判定,沒有雙引號在某些條件下會被玩死的。所以最好養成習慣,無論是不是數值都把變數名用雙引號引起來。另外,做累加操作還有別的方法,像下面這樣:
#!/bin/ksh
counter=0
while [ "$" -lt 5 ]; do
((counter++))
echo "counter is $counter"
done
for i in $(seq 0 99); do [ $i lt 10 ] && useradd student0$i || useradd student$i; done
shell中的特殊變數:
變數名含義
$0shell或shell指令碼的名字
$*以一對雙引號給出引數列表
$@將各個引數分別加雙引號返回
$#引數的個數
$_代表上乙個命令的最後乙個引數
$$代表所在命令的pid
$!代表最後執行的後台命令的pid
$?代表上乙個命令執行後的退出狀態
e.g.
編輯如下test.sh指令碼
#!/bin/bash
echo $0
echo $*
echo $@
echo $#
echo $$
ls -a /home
echo $_
在terminal視窗中執行:
xk@linux:~/work> ./test.sh -a -b -c /home
./test.sh
-a -b -c /home
-a -b -c /home
43250
. .. fy jodier sky xk zhj
/home
xk@linux:~/work>echo $?
0xk@linux:~/work>echo $!
xk@linux:~/work> ls -a /home &
[1] 3302
xk@linux:~/work> . .. fy jodier sky xk zhj
[1]+ done /bin/ls $ls_options -a /home
xk@linux:~/work> echo $!
3302
xk@linux:~/work>
為了區別$*和$@編寫如下test.sh指令碼:
#!/bin/bash
function testargs
testargs "$*"
testargs "$@"
unset -f testargs
在terminal視窗中執行:
xk@linux:~/work> ./test.sh -a -b /home
1 args
3 args
xk@linux:~/work>
這裡有乙個很有意思的問題,如果test.sh為如下的內容:
#!/bin/bash
function testargs
testargs $*
testargs $@
unset -f testargs
再次執行有:
xk@linux:~/work> ./test.sh -a -b /home
3 args
3 args
xk@linux:~/work>
shell數值和字元比較
二元比較操作符,比較變數或者比較數字.注意數字與字串的區別.整數比較 eq 等於,如 if a eq b ne 不等於,如 if a ne b gt 大於,如 if a gt b ge 大於等於,如 if a ge b lt 小於,如 if a lt b le 小於等於,如 if a le b 小於...
shell指令碼 數值比較
用於數值比較的無非大於 小於 等於 大於等於 小於等於這幾個。比較格式 數值1 比較符 數值2 注意左邊的括號與數值1之間有乙個空格,同樣,數值2和右邊的括號之間也有空格。數值比較運算子對應下面幾個 eq判斷相等,相等返回true,否則返回false ne判斷是否不相等,不相等返回true,否則返回...
Shell比較字串 數值
操作符解釋舉例 eq等於 if a eq b ne不等於 if a ne b gt 大於if a gt b ge大於等於 if a ge b lt小於 if a lt b le小於等於 if a le b 小於 需要雙括號 if a b 小於等於 需要雙括號 if a b 大於 需要雙括號 if a...