天天看點

shell程式設計之傳參篇

#!/bin/bash
:<<EOF如果不熟悉vi編輯器不小心按了ctr+s組合鍵儲存,可以按ctr+p恢複螢幕顯示
ctr+s是隐藏螢幕輸入顯示,但是輸入還是起作用。例如你在輸入密碼時即是如此
EOF

#在執行shell腳本是,向腳本傳入參數,腳本内擷取參數的格式為$n,n代表第幾個參數
#例如$1代表第一個參數,跟函數執行參數是一個效果

echo "shell 傳遞參數執行個體"
echo "執行的檔案名:$0"
echo "第一個參數為 $1"
echo "第二個參數為 $2"

:<<EOF

參數處理    說明
$# 傳遞到腳本的參數個數
$* 以一個單字元串顯示所有向腳本傳遞的參數。
如"$*"用「"」括起來的情況、以"$ $ … $n"的形式輸出所有參數。
$$    腳本運作的目前程序ID号
$! 背景運作的最後一個程序的ID号
[email protected] 與$*相同,但是使用時加引号,并在引号中傳回每個參數。
如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。
$- 顯示Shell使用的目前選項,與set指令功能相同。
$? 顯示最後指令的退出狀态。表示沒有錯誤,其他任何值表明有錯誤。
EOF

#$*與[email protected]差別:
#相同點:都是引用所有參數。
#不同點:隻有在雙引号中展現出來。假設在腳本運作時寫了三個參數 1、2、3,,則 " * #" 等價于 "1 2 3"(傳遞了一個參數),而 "@" 等價于 "1" "2" "3"(傳遞了三個參數

echo "-- \$* 示範 ---"
for i in "$*"; do
    echo $i
done

echo "-- \[email protected] 示範 ---"
for i in "[email protected]"; do
    echo $i
done

:<<EOF
在為shell腳本傳遞的參數中如果包含空格,應該使用單引号或者雙引号将該參數括起來,以便于腳本将這個參數作為整體來接收。

在有參數時,可以使用對參數進行校驗的方式處理以減少錯誤發生:

if [ -n "$1" ]; then
    echo "包含第一個參數"
else
    echo "沒有包含第一參數"
fi
注意:的是中括号 [] 與其中間的代碼應該有空格隔開
EOF
#其中if else fi為邏輯結構,[ -n "$s1"]為邏輯表達式,判斷$s1長度是否不為0,如果不#為0傳回true