小编use*_*925的帖子

将变量传递给bash数组中的`expect`

我正在尝试使用 FOR 循环遍历 IP 地址(在 bash 数组中)、登录、运行脚本然后退出。该数组称为 ${INSTANCE_IPS[@]}。但是,以下代码不起作用,因为expect似乎无法接受变量 $instance。

for instance in ${INSTANCE_IPS[@]}
  do
  echo $instance
  /usr/bin/expect -c '
  spawn ssh root@$instance;
  expect "?assword: ";
  send "<password>\r";
  expect "# ";
  send ". /usr/local/bin/bootstrap.sh\r";
  expect "# ";
  send "exit\r" '
done
Run Code Online (Sandbox Code Playgroud)

但是,expect抱怨:

can't read "instance": no such variable
    while executing
"spawn ssh root@$instance"
Run Code Online (Sandbox Code Playgroud)

位于此处的stackoverflow 上还有另一个问题,它使用环境变量来实现这一点,但是它不允许我像在数组中那样遍历不同的 IP 地址。

任何帮助表示赞赏。

干杯

linux variables bash for-loop expect

2
推荐指数
1
解决办法
8039
查看次数

Bash:在 FOR 循环中突破 IF 循环

我正在尝试组合 FOR 循环(迭代 IP 地址)和 IF 循环(在继续之前使用 nc 检查 ssh 连接是否成功)。

我有一个数组 ${INSTANCE_IPS[@]} ,其中包含 IP 地址(目前它包含 2 个 IP 地址)。这是代码:

while [ $ITERATION -le 30 ]
do
    for instance in ${INSTANCE_IPS[@]}
    do    
        nc -w 2 $instance 22 > /dev/null
            if [ $? -eq 0 ]
            then echo "connection succeeded to $instance"
            else
                ITERATION=$((ITERATION+1))
                echo ITERATION=$ITERATION
                echo "[info] connection to $instance unsuccessful. trying again. iteration=$ITERATION"
                sleep 20
            fi
    done
done
Run Code Online (Sandbox Code Playgroud)

IF 循环中的“else”语句工作正常。这是我遇到问题的“then”语句...我不知道连接成功后如何打破 IF 循环。这是我运行上述命令时的输出示例:

connection succeeded to 10.11.143.171
connection succeeded to …
Run Code Online (Sandbox Code Playgroud)

linux arrays bash loops

1
推荐指数
1
解决办法
4267
查看次数

BASH:根据其他变量的开头设置变量(可能是多个值)

我试图根据设置的内容设置$Environment变量$EnvironmentGroup.我认为结合until并且if可以工作,但我最终得到一个空变量.任何帮助表示赞赏:)

until [ -n $Environment ]
  do
    if [ $EnvironmentGroup -eq ^dev* ]
    then Environment=dev
    break
    fi
    if [ $EnvironmentGroup -eq ^sit* ]
    then Environment=sit
    break
    fi
    if [ $EnvironmentGroup -eq ^uat* ]
    then Environment=uat
    break
    fi
    if [ $EnvironmentGroup -eq ^prod* ]
    then Environment=prod
    break
    fi
done
Run Code Online (Sandbox Code Playgroud)

linux bash if-statement

1
推荐指数
1
解决办法
77
查看次数

在bash for循环中组合python脚本时出错

警告:python非常新

我正在尝试连接存储在数组$ {INSTANCE_IPS [@]}中的一系列IP地址.我试图使用for循环使用python脚本调用API到数组中的每个IP地址.

但是,当尝试运行以下脚本时,我收到错误:

Traceback (most recent call last):
File "<stdin>", line 12, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Traceback (most recent call last):
File "<stdin>", line 12, in <module>
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
Run Code Online (Sandbox Code Playgroud)

我确信我可以在python中进行for循环,但我还没有学到这一点,而且目前只需要让它工作.如果我只使用阵列中的一个IP地址,它运行正常.

for instance in ${INSTANCE_IPS[@]}
do
  echo "Connecting to $instance"

  /usr/bin/python << END_OF_PYTHON

  import requests
  import json
  import sys
  import socket
  import fnmatch
  import os

  ipaddress = os.getenv('instance')
  print ipaddress

  port = ':80'
  updatedipaddress = …
Run Code Online (Sandbox Code Playgroud)

python bash

1
推荐指数
1
解决办法
123
查看次数

了解linux`free -m`中的缓冲区/缓存

只是寻找关于free -mLinux输出的一些快速帮助.这是我的一台服务器上的示例:

  $free -m
               total       used       free     shared    buffers     cached
  Mem:         14881      14813         68          0        262        883
  -/+ buffers/cache:      13667       1213
  Swap:         4095        240       3855
Run Code Online (Sandbox Code Playgroud)

我知道内核可以并将使用可用内存进行磁盘缓存来加速系统.

通常情况下,我会查看"免费"列中的第二个值,在上面的例子中它是1213.它通常比这要高很多.

我想我想了解' - /+ buffers/cache'旁边的两个输出是什么意思.从我所看到的,系统内存确实很低(只有1213MB可供应用程序使用),操作系统实际需要 13GB用于缓存?

linux memory caching free-command

1
推荐指数
1
解决办法
1万
查看次数