獲取參數
向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:i:p" opt; do
case $opt in
t)
context=$context"CONSUL_CHECK_TYPE="$OPTARG"\n" #參數存在$OPTARG中, 注意是OPTARG大寫
;;
i)
context=$context"CONSUL_CHECK_IP="$OPTARG"\n"
;;
p)
context=$context"CONSUL_CHECK_PORT="$OPTARG"\n"
;;
esac
done
echo -e $context > /var/www/.env