gpt4 book ai didi

arrays - 将远程 ssh 命令的输出存储到循环中的局部变量

转载 作者:行者123 更新时间:2023-12-02 14:38:37 24 4
gpt4 key购买 nike

我尝试为主机列表运行命令,然后将输出存储在循环中的变量中。我还创建了一个数组来关联 ip/hostname,因为我的命令只接受 IP 地址作为参数,但我想在变量名中使用主机名和 channel 名。我的代码看起来像:

#!/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:第 20 行:10.0.0.1:找不到命令
./test_array.sh:第 20 行:数组:坏数组下标

我可以猜测这是一个语法错误,但无法弄清楚。我很感激任何帮助。

最佳答案

我将其重写为

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"

channels="1 2 3"
script=/path_to_my_remote_script
cmd=(ssh -t -o ConnectTimeout=10 -l username myscript_host)

for ip in "${!array[@]}" ; do
for channel in $channels ; do
varname=my_variable_name_${array[$ip]}_$channel
echo $varname

remote_script="sudo $script -i $ip | awk -v IGNORECASE=1 '/ipv4 count/ {print \$4}'"
out=$( "${cmd[@]}" "$remote_script" )

declare "$varname=$out"
done
done
  • declare命令可以分配给动态创建的变量名,而无需使用 eval
  • 您不需要将数组键存储在单独的变量中
  • 在数组中存储命令更健壮(ref)
  • 如果您调用 awk , 你不需要使用 grep第一个
  • 在我看来,太多的变量实际上会降低可读性

  • 再想一想,我会使用另一个数组来存储输出,使用伪多维键:
    declare -A my_variable_name
    for ip in "${!array[@]}" ; do
    for channel in $channels ; do
    remote_script="sudo $script -i $ip | awk -v IGNORECASE=1 '/ipv4 count/ {print \$4}'"
    my_variable_name[$ip,$channel]=$( "${cmd[@]}" "$remote_script" )
    done
    done

    关于arrays - 将远程 ssh 命令的输出存储到循环中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204307/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com