我尝试编写一个bash代码,我正在使用命令替换。我的代码就像:
#!/bin/bash
IP="10.0.0.1 10.0.0.2"
PORT="22 80"
USERNAME="admin"
SCRIPT_HOST="adminHost"
HOME_DIR=/home/admin
SCRIPT_DIR=$HOME_DIR/scripts
script="sudo /my_remote_script.sh"
SSH="/usr/bin/ssh -t -o ConnectTimeout=10 -l ${USERNAME} ${SCRIPT_HOST}"
declare -a array1
declare -a array2
declare -a array3
for ip in ${IP} ; do
for port in ${PORT} ; do
rmt_command1=" $script -i $ip -p $port | awk -v IGNORECASE=1 '/pattern1/ {print \$4}' "
rmt_command2=" $script -i $ip -p $port | awk -v IGNORECASE=1 '/pattern2/ {print \$5}' "
rmt_command3=" $script -i $ip -p $port | awk -v IGNORECASE=1 '/pattern3/ {print \$5}' "
array1[$ip,$port]=$($SSH "$rmt_command1")
array2[$ip,$port]=$($SSH "$rmt_command2")
array3[$ip,$port]=$($SSH "$rmt_command3")
done
done
for ip in ${IP}
for port in ${PORT}
printf ${array1[$ip,$port]}
printf ${array2[$ip,$port]}
printf ${array3[$ip,$port]}
done
我收到如下错误消息:
./test_sh: line 20: syntax error near unexpected token `|'
./test_sh: line 20: ` rmt_command1=" $script -i $ip -p $port | awk -v IGNORECASE=1 '/pattern1/ {print \$4}' "'
可能出现什么问题?
答案 0 :(得分:0)
我在没有阅读错误消息的情况下看到了这个问题:
for ip in ${IP} for port in ${PORT} printf ${array1[$ip,$port]} printf ${array2[$ip,$port]} printf ${array3[$ip,$port]} done
您缺少一个done
和两个do
:
for ip in "$IP"; do
for port in "$PORT"; do
printf "${array1[$ip,$port]}"
printf "${array2[$ip,$port]}"
printf "${array3[$ip,$port]}"
done
done
然后,{}
和${IP}
上的${PORT}
如果没有,则无效,与双引号不同。
否则,对于您的错误消息,您可以尝试删除管道周围的空格(|
)。