1.Shell傳遞參數
我們可以在執行 Shell 腳本時,向腳本傳遞參數,腳本內獲取參數的格式為:$n。n 代表一個數字,1 為執行腳本的第一個參數,2 為執行腳本的第二個參數,以此類推……($0為執行的文件名)
實例:
以下實例我們向腳本傳遞三個參數,並分別輸出,其中 $0 為執行的文件名(包含文件路徑):
#!/bin/bash echo "Shell 傳遞參數實例!"; echo "執行的文件名:$0"; echo "第一個參數為:$1"; echo "第二個參數為:$2"; echo "第三個參數為:$3";
為腳本設置可執行權限,並執行腳本,輸出結果如下所示:
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 傳遞參數實例! 執行的文件名:./test.sh 第一個參數為:1 第二個參數為:2 第三個參數為:3
另外,還有幾個特殊字符用來處理參數:
#!/bin/bash echo "Shell 傳遞參數實例!"; echo "第一個參數為:$1"; echo "參數個數為:$#"; echo "傳遞的參數作為一個字符串顯示:$*";
執行腳本,輸出結果如下所示:
$ chmod +x test.sh $ ./test.sh 1 2 3 Shell 傳遞參數實例! 第一個參數為:1 參數個數為:3 傳遞的參數作為一個字符串顯示:1 2 3
$* 與 $@ 區別:
相同點:都是引用所有參數。
不同點:只有在雙引號中體現出來。假設在腳本運行時寫了三個參數 1、2、3,,則 " * " 等價於 "1 2 3"(傳遞了一個參數),而 "@" 等價於 "1" "2" "3"(傳遞了三個參數)。
#!/bin/bash echo "-- \$* 演示 ---" for i in "$*"; do echo $i done echo "-- \$@ 演示 ---" for i in "$@"; do echo $i done
執行腳本,輸出結果如下所示:
$ chmod +x test.sh $ ./test.sh 1 2 3 -- $* 演示 --- 1 2 3 -- $@ 演示 --- 1 2 3
在為shell腳本傳遞的參數中如果包含空格,應該使用單引號或者雙引號將該參數括起來,以便於腳本將這個參數作為整體來接收。
if [ -n "$1" ]; then echo "包含第一個參數" else echo "沒有包含第一參數" fi
注意:中括號 [] 與其中間的代碼應該有空格隔開。
2.Shell echo命令
2.1 顯示普通字符串
echo "It is a test"
這里的雙引號完全可以省略,以下命令與上面實例效果一致:
echo It is a test
2.2 顯示轉義字符
echo "\"It is a test\""
結果將是:
"It is a test"
2.3 顯示變量
read 命令從標准輸入中讀取一行,並把輸入行的每個字段的值指定給 shell 變量
#!/bin/sh read name echo "$name It is a test"
以上代碼保存為 test.sh,name 接收標准輸入的變量,結果將是:
[root@www ~]# sh test.sh OK #標准輸入 OK It is a test #輸出
2.4 顯示換行
echo -e "OK! \n" # -e 開啟轉義 echo "It is a test"
輸出結果:
OK! It is a test
2.5 顯示不換行
#!/bin/sh echo -e "OK! \c" # -e 開啟轉義 \c 不換行 echo "It is a test"
輸出結果:
OK! It is a test
2.6 顯示結果定向到文件
echo "It is a test" > myfile
2.7 原樣輸出字符串,不進行轉義或取變量
echo '$name\"'
輸出結果:
$name\"
2.8 顯示命令執行結果
echo `date`
注意: 這里使用的是反引號 `, 而不是單引號 '。
結果將顯示當前日期:
Thu Jul 24 10:08:46 CST 2014
3. Shell test命令
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。
實例:
num1=100 num2=100 if test $[num1] -eq $[num2] then echo '兩個數相等!' else echo '兩個數不相等!' fi
輸出結果:
兩個數相等!
代碼中的 [] 執行基本的算數運算,如:
#!/bin/bash a=5 b=6 result=$[a+b] # 注意等號兩邊不能有空格 echo "result 為: $result"
結果為:
result 為: 11
實例:
num1="ru1noob" num2="runoob" if test $num1 = $num2 then echo '兩個字符串相等!' else echo '兩個字符串不相等!' fi
輸出結果:
兩個字符串不相等!
實例:
cd /bin if test -e ./bash then echo '文件已存在!' else echo '文件不存在!' fi