- 论坛徽章:
- 4
|
本帖最后由 520harrison 于 2016-04-23 17:46 编辑
最近在写一个脚本,有一个功能是 将命令传到脚本中,然后批量在远程主机执行
其实在命令行中直接循环执行会更简单点,我这个绕了个弯,只是想把这个功能添加进去
下面是我的思路(正则匹配有问题)
- # 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"
复制代码 假如我想远程执行如下命令- 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"}'
复制代码 我可以这样写- 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\"}' "
复制代码 正则匹配想实现双引号对,还有${} 如: "$Username" "${Username}" $Username
请问,我应该如何改进,或者有其他的办法可以实现,感谢!
|
|