- 論壇徽章:
- 4
|
本帖最后由 520harrison 于 2016-04-23 17:46 編輯
最近在寫(xiě)一個(gè)腳本,有一個(gè)功能是 將命令傳到腳本中,然后批量在遠(yuǎn)程主機(jī)執(zhí)行
其實(shí)在命令行中直接循環(huán)執(zhí)行會(huì)更簡(jiǎn)單點(diǎn),我這個(gè)繞了個(gè)彎,只是想把這個(gè)功能添加進(jìn)去
下面是我的思路(正則匹配有問(wèn)題)
- # shell.sh
- CMD="$@"
- echo "$CMD"
- REG="[^\][\"]*\$[{]*[^[:digit:]][[:alnum:]_]*[}\"]*"
- while echo $CMD|grep "$REG" ; do
- CMD1=${CMD%%$REG*}
- CMD2=${CMD#*$REG}
- VAL=$(echo $CMD|sed -e "s#$CMD1##" -e "s#$CMD2##")
- declare | grep "^${VAL#\$}" && VAL=`eval $VAL`
- CMD=${CMD1}${VAL}${CMD2}
- done
- echo "$CMD"
復(fù)制代碼 假如我想遠(yuǎn)程執(zhí)行如下命令- id $Username | awk -F'[=(,]' '{printf "%-20s%-18s%s:%s","'"$IP"'","'"$Username"'",$2,$4};\
- {if(NF>=6) {printf ":";i=6;while (i<NF-2) {printf "%s,",$i;i=i+2};printf "%s",$i};printf "\n"}'
復(fù)制代碼 我可以這樣寫(xiě)- bash shell.sh "id $Username | awk -F'[=(,]' '{printf \"%-20s%-18s%s:%s\",\"'\"$IP\"'\",\"'\"$Username\"'\",\$2,\$4};{if(NF>=6) {printf \":\";i=6;while (i<NF-2) {printf \"%s,\",\$i;i=i+2};printf \"%s\",\$i};printf \"\n\"}' "
復(fù)制代碼 正則匹配想實(shí)現(xiàn)雙引號(hào)對(duì),還有${} 如: "$Username" "${Username}" $Username
請(qǐng)問(wèn),我應(yīng)該如何改進(jìn),或者有其他的辦法可以實(shí)現(xiàn),感謝!
|
|