【问题标题】:How to ignore a PC which is shut down or locked or not connected with the network? [duplicate]如何忽略关闭或锁定或未连接网络的 PC? [复制]
【发布时间】:2021-12-14 17:27:45
【问题描述】:

我已经定义了一个字符串数组(PC 名称)。该脚本将从远程 PC 复制 File 1 并将其保存在本地。 grep 命令将读取File 1 并将结果保存在另一个文件中。但是当一台电脑关机或没有连接网络时,脚本不会执行,我必须按Ctrl+C然后它会移动到下一台电脑。

我如何更改此脚本,以便在 PC 关闭或未连接到网络或被锁定时移动到下一台 PC?例如,当user2@PC2 关闭或未连接网络或锁定(需要密码)时,脚本应自动移动到user3@PC3。它应该从每个在线user@PC 中复制File1 一次,然后运行 ​​grep。

#!/bin/sh

word=name

declare -a arr=("user1@PC1" "user2@PC2" "user3@PC3")
for i in "${arr[@]}"
do
    for t in 1 2 3
    do
        scp ${i}:/PCpath/File1 ./File${t}
        grep -e "${word}" "File${t}" >| /home/new/File${t}`_$(date`)
    done
done

【问题讨论】:

  • scp 如果无法连接到服务器应该会超时。
  • 您可以先ping远程机器,如果没有响应则跳过。
  • @Barmar 谢谢,但如果电脑没有响应,我如何更改上述脚本以跳过?

标签: bash shell


【解决方案1】:

使用ping 测试远程PC 是否已启动,然后再尝试从中复制。

    for i in "${arr[@]}"
    do
        if ping -q -c 2 "$i"
        then
            for t in 1 2 3
            do
                scp ${i}:/PCpath/File1 ./File${t}
                grep -e "${word}" "File${t}" >| /home/new/File${t}`_$(date`)
            done
        else
            echo "$i down, skipping"
        fi
    done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多