使用 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
我尝试使用 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