使用 BASH 脚本 PING 多个参数

PING multiple Arguments with BASH script

我尝试使用 BASH 编写一个简单的脚本,尝试对每个参数($1 $2 $3...等)执行 ping 操作。从现在开始,我能够 ping 一个参数并收到好的答案,但它不能在输入多个参数的情况下正常工作;像这样 (./Script.sh Arg1 Arg2 ....)。另外,该脚本适用于单个 Arguments 条目,但它一直告诉我它们是错误 link 到我的第 6 行,就在给条件回显 link 之前。

#!/bin/bash


PING=`ping -c 1 "$@" | grep bytes | wc -l` 

for ip in "$@"; do "${PING}" ;
    if [[ "$PING" -gt 1 ]];then 
        echo "L'address ${ip} ping"
    else
        echo "L'adresse ${ip} ne ping pas"
    fi
done

输出为:

./bash3.sh: line 6: 2: command not found
L'address IP ping

如果我在执行它之前添加了一个以上的地址,它总是通过“地址无法访问”的 else

您正在将 PING 设置为脚本启动时 ping -c 1 "$@" | grep bytes | wc -l 命令的输出。您没有将它设置到命令行,以便您可以在循环期间执行它。

使用函数,而不是变量。

您还可以使用 -c 选项来 grep 到 return 匹配计数,而不是通过管道传输到 wc -l

ping_count() {
    ping -c 1 "$@" | grep -c bytes
}

for ip in "$@"; do
    if [[ $(ping_count "$ip") -gt 1 ]];
    then echo "L'address $ip ping"
    else echo "L'adresse $ip ne ping pas"
    fi
done

此外,ping 根据是否收到响应来设置其退出状态。因此,无需计算匹配行,只需测试 ping.

的结果
for ip in "$@"; do
    if ping -c 1 -q "$ip"
    then echo "L'address $ip ping"
    else echo "L'adresse $ip ne ping pas"
    fi
done
#!/usr/bin/env bash

for input in "$@" 

    do  
        ping=$(ping -c 1 $@ | grep bytes | wc -l)
        if [ $ping -gt 1 ];  then 
            echo "L'address IP ping"
        else
            echo "L'adresse IP ne ping pas"
        fi  
    done