我试着用BASH编写一个简单的脚本,试图平移每个参数($1 $2 $3...etc)。从现在开始,我能够平一个参数并收到好的答案,但是它在输入多个参数时不能正常工作;比如(./Script.sh Arg1 Arg2.)。另外,该脚本只适用于单个参数条目,但它一直告诉我,它们是到我的第6行的错误链接,就在给条件回显链接之前。
#!/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如果在执行之前添加多个地址,则总是经过“无法到达的地址”。
发布于 2022-03-22 20:58:57
在脚本启动时,将PING设置为ping -c 1 "$@" | grep bytes | wc -l命令的输出。您没有将其设置为命令行,以便在循环期间执行它。
使用函数,而不是变量。
您也可以使用-c选项grep来返回匹配的计数,而不是管道到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发布于 2022-03-22 21:03:13
#!/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
donehttps://stackoverflow.com/questions/71578788
复制相似问题