预计 bash 脚本中的命令失败



我一直在调整它很长一段时间,但我被一个奇怪的输出流困住了,没有结果。基本上,我正在尝试在我们庞大的网络上找到具有特定密码和处理器的某些ssh设备。这是脚本:

#/bin/bash
for i in 54
do
  for j in 1 13 14 15
  do
    out=$(expect -c "spawn /usr/bin/ssh some_guy@10.2.$i.$j cat /proc/cpuinfo | grep MyString
      expect {
        -re ".*Are.*.*yes.*no.*" {
        send "yesn"
        exp_continue
        }
        "*?assword:*" {
        send "mypasswd"
        send "n"
        exp_continue
        }
      }")
    if [["$out" != ""]]
    then
      echo "10.2.$i.$j" >> rpiout.txt
    fi
  done
done

ssh 命令可以自行工作,很好。此外,预期脚本工作正常。此外,如果我在"if [...]]]"语句之前插入"echo $out",我会从 SSH 命令中获得预期的输出。但是,尝试写入文件时,我将此输出发送到命令行并且没有日志文件...:

./check.sh: line 19: [[spawn /usr/bin/ssh some_guy:@10.2.54.1 cat /proc/cpuinfo | grep MyString
some_guy:@10.2.54.1's password:
Permission denied, please try again.
some_guy:@10.2.54.1's password:
Permission denied, please try again.
some_guy:@10.2.54.1's password:
: No such file or directoryy,password).
./check.sh: line 19: [[spawn /usr/bin/ssh some_guy:@10.2.54.13 cat /proc/cpuinfo | grep MyString
some_guy:@10.2.54.13's password:
: No such file or directory
./check.sh: line 19: [[spawn /usr/bin/ssh some_guy:@10.2.54.14 cat /proc/cpuinfo | grep MyString
some_guy:@10.2.54.14's password:
: No such file or directory
: No such file or directoryawn /usr/bin/ssh some_guy:@10.2.54.15 cat /proc/cpuinfo | grep MyString

第一个要求输入密码3次是正确的(因为它不是目标设备之一)。后 2 个是不存在的 IP 设备,但后 2 个应返回正结果。

请注意,在"错误"./check.sh:第 19 行:[[spawn..."中,第 19 行是以"if [[..."开头

的行。

非常感谢任何帮助让我摆脱困境!!

在 bash [[ 中不仅仅是语法,它是一个命令。像任何其他命令一样,它需要空格将其与其参数分开。

if [["$out" != ""]]

if [[ "$out" != "" ]]

if [[ -n "$out" ]]

此外,由于期望回显命令的方式就像您在终端上看到的那样,输出不太可能是空的。尝试这样的事情:

out=$( expect <<END
    spawn -noecho /usr/bin/ssh some_guy@10.2.$i.$j sh -c {grep -q MyString /proc/cpuinfo || echo _NOT_FOUND_}
    expect {
        -re ".*Are.*.*yes.*no.*" {
            send "yesr"
            exp_continue
        }
        "*?assword:*" {
            send "mypasswdr"
            exp_continue
        }
        eof
    }
END
)
if [[ $out == *_NOT_FOUND_* ]]; then
    echo "MyString not found on host 10.2.$i.$j"
fi

其中_NOT_FOUND_是一些你不会在/proc/cpuinfo 中看到的字符串

-noecho在这里至关重要,除非你回应它,否则将"_NOT_FOUND_"排除在$out之外。

相关内容

  • 没有找到相关文章

最新更新