1. 程式人生 > 其它 >shell指令碼 獲取輸入引數、選項

shell指令碼 獲取輸入引數、選項

獲取引數

向shell指令碼傳遞資料的最基本方式是使用命令列引數。
linux執行命令:./init.sh a b c d

程式碼:

#! /bin/sh
echo "引數1:"$1
echo "引數2:"$2
echo "引數個數:"$#
  • 讀取輸入引數
    讀取輸入的引數的變數為位置引數,位置引數通過標準數字表示,
    其中$0為程式名稱,$1為第一個引數,$2為第二個引數,依次類推,直到$9為第九個引數。
    shell指令碼自動將命令列引數賦值給各個位置變數。同時輸入多個引數可以是數值也可以是字串時,必須使用空格分隔要想在引數值中包含空格,就必須使用單引號或雙引號
    當引數多於9個後,必須在shell指令碼內使用大括號將變數括起來,如 ${10}

    。從而可以使用任意個引數。

  • 讀取程式名稱
    傳遞給變數$0的字串實際上是程式的路徑根據呼叫方法決定是相對還是絕對路徑。
    使用basename命令可以去掉路徑字首,只獲得程式名稱名字中不可以有空格。

獲取選項

在Linux系統中,許多命令都提供了選項,使用不同的選項就會得到不通的執行結果
例如:ls命令,ls命令提供了多個選項:-l、-a、-A、-h、-i等等,每個選項具有不同的功能,我們自己寫指令碼時也可以定義選項。

1.getopts命令的如何使用:

用getopts命令獲取到指令碼選項後,getopts會將獲取到的選項所對應的引數(選項對應的引數,並不是選項本身,有的命令選項後面是需要跟一個引數的,例如tcpdump 的-w選項,後面需要指定一個檔案來儲存抓包資料)自動儲存到OPTARG這個變數中。

getopts命令格式:getopts OPTSTRING VARNAME

OPTSTRING:告訴getopts會有哪些選項和引數(用選項後面加“:”來表示選項後面需要加引數)
VARNAME:儲存getopts獲取到的選項

#! /bin/sh
host=`ip addr | grep /24 | awk '{print $2}' | awk -F '/' '{print $1}'`
context="HOST="$host"\n"
while getopts "t:ip:p" opt; do
    case $opt in
        t)
            context=$context"CONSUL_CHECK_TYPE="$OPTARG"\n" #引數存在$OPTARG中, 注意是OPTARG大寫
        ;;
        ip)
            context=$context"CONSUL_CHECK_IP="$OPTARG"\n"
        ;;
        p)
            context=$context"CONSUL_CHECK_PORT="$OPTARG"\n"
        ;;
    esac
done
echo -e $context > /var/www/.env