shell指令碼 獲取輸入引數、選項
阿新 • • 發佈:2021-06-29
獲取引數
向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