【发布时间】:2013-12-11 09:00:57
【问题描述】:
我尝试编写 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}' "'
可能出了什么问题?
【问题讨论】:
-
如果要执行命令,则语法为
var=$(command)。使用rmt_command1=" $script ...你不会得到它。 -
${IP}"看起来不对 - 你的意思是"${IP}"还是${IP}? -
是 ${IP},已更正。
-
注意关联数组是用
declare -A而不是declare -a声明的 -
我没有看到任何语法错误。
rmt_command1之前可能有一些奇怪的空格。有点长,但是您能否将hexdump -C script.sh(其中script.sh是您的文件名)的输出添加到问题中?如果/一旦我们发现问题,我们可以编辑掉不相关的部分。