一、test條件判斷
1,test文件測試:
-b file 若文件存在且是一個塊特殊文件,則為真
-c file 若文件存在且是一個字符特殊文件,則為真
-d file 若文件存在且是一個目錄,則為真
-e file 若文件存在,則為真
-f file 若文件存在且為一個規(guī)則文件,則為真
-g file 若文件存在且設置了SGID位的值,則為真
-h file 若文件存在且為一個符號鏈接,則為真
-k file 若文件存在且設置了“sticky”位的值,則為真
-p file 若文件存在且為一已命名管道,則為真
-s file 若文件存在且其大小大于零,則為真
-u file 若文件存在且設置了SUID位的值,則為真
-r file 若文件存在且可讀,則為真
-w file 若文件存在且可寫,則為真
-x file 若文件存在且可執(zhí)行,則為真
-o file 若文件存在且被有效用戶ID所擁有,則為真
2,test字符串比較
-z string 若string長度為0,則為真
-n string 若string長度不為0,則為真
string1 = string2 若兩個字符串相等,則為真
string1 != string2 若兩個字符串不相等,則為真
3,test命令的數字比較操作符
int1 -eq int2 若int1等于int2,則為真
int1 –ne int2 若int1不等于int2,則為真
int1 –lt int2 若int1小于int2,則為真
int1 –le int2 若int1小于等于int2,則為真
int1 –gt int2 若int1大于int2,則為真
int1 –ge int2 若int1大于等于int2,則為真
4,test復合表達式
! expr 若expr為假則復合表達式為真。expr可以是任何有效的測試表達式
expr1 -a expr2 若expr1和expr2都為真,則為真
expr1 -o expr2 若expr1和expr2有一個為真,則為真
二、shell里的特殊變量
# sh /usr/local/bkeep/shell.sh 001 002
I'm $0 is:/usr/local/bkeep/shell.sh //正在被執(zhí)行腳本的名字;`basename $0`
I'm $1 is:001 //$1接收到的參數
I'm $2 is:002 //$2接收到的參數
I'm $# is:2 //總共接收到的參數個數
I'm $* is:001 002 //把接收到的參數全部打印出來
I'm $@ is:001 002 //同上
I'm $? is:0 //上一個腳本的退出狀態(tài)“0”代表正常;“1”非正常退出
I'm $$ is:24137 //當前執(zhí)行腳本的進程ID
I'm $! is: //前一個后臺進程的id
三:其他
1.返回值 #?
cd dir
echo "$?"
如果dir存在,則返回0,不存在則返回1. 其他函數的命令也是一樣,比如diff,等等。
每個命令都會返回一個 exit 狀態(tài)(有時候也叫return 狀態(tài)).成功返回0,如果返回一個非0 值,通
常情況下都會被認為是一個錯誤碼.一個編寫良好的UNIX 命令,程序,和工具都會返回一個0 作為
退出碼來表示成功,雖然偶爾也會有例外.
同樣的,腳本中的函數和腳本本身都會返回退出狀態(tài).在腳本或者是腳本函數中執(zhí)行的最后的命
令會決定退出狀態(tài).在腳本中,exit nnn 命令將會把nnn 退出碼傳遞給shell
$?讀取最后執(zhí)行命令的退出碼.函數返回后,$?給出函數最后執(zhí)行的那條命令的退出碼.這種給
函數返回值的方法是 Bash 的方法.對于腳本來說也一樣.總之,一般情況下,0 為成功,非0 失敗W
2 .
$ 變量替換操作符
只有在變量被聲明,賦值,unset 或exported 或者是在變量代表一個signal 的時候,
變量才會是以本來的面目出現在腳本里.變量在被賦值的時候,可能需要使用"=",
read狀態(tài)或者是在循環(huán)的頭部.
在""中還是會發(fā)生變量替換,這被叫做部分引用,或叫弱引用.而在''中就不會發(fā)生變
量替換,這叫做全引用,也叫強引用.這兩個符合在同一個按鍵上。具體見第5 章的討論.
注意:$var 與${var}的區(qū)別,不加{},在某些上下文將引起錯誤,為了安全,使用2.
還有一個按鍵在左上角,即按鍵1的左邊。此按鍵有下面的作用。即將ls -l的結果傳給a
17 a=`ls -l` # 把ls -l 的結果給a
18 echo $a # 別忘了,這么引用的話,ls 的結果中的所有空白部分都沒了(包括換行)
19 echo
20 echo "$a" # 這么引用就正常了,保留了空白
或者直接
echo "$(ls -l)" 也可以取出目錄
3.
在read 命令狀態(tài)中
30 echo -n "Enter \"a\" "
31 read a
32 echo "The value of \"a\" is now $a."
33
34 echo
35
這個方法可以接受鍵盤輸入到a中。
4.
在一個雙引號中直接使用變量名,一般都是沒有問題的.它阻止了所有在引號中的特殊字符的
重新解釋--包括變量名[2]--但是$,`和\除外.[3]保留$,作為特殊字符的意義,是為了能夠在雙
引號中也能夠正常地引用變量("$var").這樣在""中可以使用變量所表達的值(Example 4-1).
使用""來防止單詞分割.[4]如果在參數列表中使用雙引號,將使得雙引號中的參數作為一個參
數.即使雙引號中的字符串包含多個單詞(也就是包含空白部分),也不會變?yōu)槎鄠€參數,如:
1 variable1="a variable containing five words"
2 COMMAND This is $variable1 # COMMAND 將以7 個參數來執(zhí)行
3 # "This" "is" "a" "variable" "containing" "five" "words"
4
5 COMMAND "This is $variable1" # COMMAND 將以1 個參數來執(zhí)行
5.賦值的方法
--------------------------------------------------------
a:C風格的賦值
7 (( a = 23 )) # 給一個變量賦值,從"="兩邊的空格就能看出這是c 風格的處理.
8 echo "a (initial value) = $a"
9
10 (( a++ )) # 變量'a'后加1,C 風格.
11 echo "a (after a++) = $a"
12
13 (( a-- )) # 變量'a'后減1,C 風格.
14 echo "a (after a--) = $a"
------------------------------------------------
37(( t = a<45?7:11 )) # C 風格的3 元操作.
38 echo "If a < 45, then t = 7, else t = 11."
39 echo "t = $t " # Yes!
---------------------------------------------------
18 LIMIT=10
19
20 for ((a=1; a <= LIMIT ; a++)) # Double parentheses, and "LIMIT" with no "$".
20 for ((a=1; a <= LIMIT ; a++)) # 雙圓括號, 并且"LIMIT"變量前邊沒有 "$".
21 do
22 echo -n "$a "
23 done
--------------------------------------------
b:let
4 a=2334 # 整型
5 let "a += 1" #不加雙引號也可以
6 echo "a = $a " # a = 2335
--------------------------------------------------------------------
c:取變量
5 a=2334
6 a=$(($a+1))
7 echo "$a" #a=2335
------------------------------------------
聯系客服