【发布时间】:2013-12-10 20:12:54
【问题描述】:
我尝试为主机列表运行命令,然后将输出存储在循环中的变量中。我还创建了一个数组来关联 ip/hostname,因为我的命令只接受 IP 地址作为参数,但我想在变量名中使用主机名和通道名。我的代码看起来像:
#!/bin/bash
IP="10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5"
CHANNEL="1 2 3 "
USERNAME="username"
SCRIPT_HOST="myscript_host"
HOME_DIR="/home/myuser"
SCRIPT_DIR=$HOME_DIR/scripts
COMMAND="sudo /path_to_my_remote_script"
SSH="ssh -t -o ConnectTimeout=10 -l $USERNAME"
declare -A array
array[10.0.0.1]="host1"
array[10.0.0.2]="host2"
array[10.0.0.3]="host3"
array[10.0.0.4]="host4"
array[10.0.0.5]="host5"
for ip in ${IP} ; do
for channel in ${CHANNEL} ; do
my_variable_name_$(${array[$($ip)]})_$c=$($SSH "$COMMAND -i $ip |grep -i \"ipv4 count\"|awk {print \$4}'")
echo my_variable_name_$(${array[$($ip)]})_$c
done;done
当我执行我的脚本时,我收到如下错误消息:
./test_array.sh: line 20: 10.0.0.1: command not found ./test_array.sh: line 20: array: bad array subscript
我可以猜测这是一个语法错误,但无法弄清楚。我很感激任何帮助。
【问题讨论】:
-
我把它改成了:my_variable_name_${array[$($ip)]}_$c=$($SSH "$COMMAND -i $ip | grep -i \"ipv4 count\" | awk ' {print \$4}'") echo my_variable_name_${array[$($ip)]}_$c done;完成但同样的错误。 ./test_array.sh: line 20: 10.0.0.1: command not found ./test_array.sh: line 20: array: bad array subscript
-
据我所知,它不喜欢赋值的右侧,它将 -i $ip 作为单独的命令,但它应该是 $COMMAND 命令的参数。我想查看一个变量名,例如 my_variable_name_10.0.0.1_1 my_variable_name_10.0.0.1_2 my_variable_name_10.0.0.1_3 等等。
标签: arrays bash for-loop ssh echo