意外令牌附近的语法错误`|'

时间:2013-11-26 09:41:51

标签: arrays bash ssh awk pipe

我尝试编写一个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}' "'

可能出现什么问题?

1 个答案:

答案 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}如果没有,则无效,与双引号不同。

否则,对于您的错误消息,您可以尝试删除管道周围的空格(|)。