我的第一个 Bash 脚本看起来效率不高
My first Bash script does not look so efficient
这是我的第一个 bash 脚本,使用了我在网上找到的一些资源。我认为有更好的方法可以使用其他形式的条件语句(if then vs control operators)来写这个。
这是一个基本上检查主机是启动还是关闭(检查它是否可 ping 通)的脚本。你将所有你想要的 ip 地址转储到一个文件中,然后 运行 脚本调用该文件。文本文件如下所示:
8.8.8.8
4.8.8.8
4.4.4.4
127.0.0.1
实际的脚本是这样的。 2>&1 是否必要,因为它没有。我不得不经常使用括号。
#!/bin/bash
while read line
do
A=$(ping -c 1 $line)
((echo $A | grep "64 bytes") > /dev/null 2>&1 && (echo "UP - "$line)) || echo "DOWN - "$line
done <
谢谢!
你完全可以不用括号:
while read -r address; do
ping -c 1 $address >/dev/null 2>&1 && echo "UP - $address" || echo "DOWN - $address"
done < file
>/dev/null 2>&1
将 STDOUT 和 STDERR 都重定向到 /dev/null
,这意味着 ping
的任何输出都不会打印到您的终端。
然后您可以使用 &&
和 ||
运算符在成功(ping 退出 0
)或失败(ping 退出 >0
)
如果您愿意,可以使用 if..then..else:
while read -r address; do
if ping -c 1 $address > /dev/null 2>&1; then
echo "UP - $address"
else
echo "DOWN - $address"
fi
done < file
arco444 有正确答案。其他一些注意事项
- 形式
A && B || C
,如果A成功则B执行;如果 B 失败,C 将执行。 if A; then B; else C; fi
不会发生这种情况
- 正确的缩进非常有助于识别错误(none 这里,但一般来说)
- 使用更好的变量名:
$ip
比$line
更有意义
- 变量进入内部引号
- 括号引入了子shell,这会降低性能。只在必要时使用
这是我的第一个 bash 脚本,使用了我在网上找到的一些资源。我认为有更好的方法可以使用其他形式的条件语句(if then vs control operators)来写这个。
这是一个基本上检查主机是启动还是关闭(检查它是否可 ping 通)的脚本。你将所有你想要的 ip 地址转储到一个文件中,然后 运行 脚本调用该文件。文本文件如下所示:
8.8.8.8
4.8.8.8
4.4.4.4
127.0.0.1
实际的脚本是这样的。 2>&1 是否必要,因为它没有。我不得不经常使用括号。
#!/bin/bash
while read line
do
A=$(ping -c 1 $line)
((echo $A | grep "64 bytes") > /dev/null 2>&1 && (echo "UP - "$line)) || echo "DOWN - "$line
done <
谢谢!
你完全可以不用括号:
while read -r address; do
ping -c 1 $address >/dev/null 2>&1 && echo "UP - $address" || echo "DOWN - $address"
done < file
>/dev/null 2>&1
将 STDOUT 和 STDERR 都重定向到 /dev/null
,这意味着 ping
的任何输出都不会打印到您的终端。
然后您可以使用 &&
和 ||
运算符在成功(ping 退出 0
)或失败(ping 退出 >0
)
如果您愿意,可以使用 if..then..else:
while read -r address; do
if ping -c 1 $address > /dev/null 2>&1; then
echo "UP - $address"
else
echo "DOWN - $address"
fi
done < file
arco444 有正确答案。其他一些注意事项
- 形式
A && B || C
,如果A成功则B执行;如果 B 失败,C 将执行。if A; then B; else C; fi
不会发生这种情况
- 正确的缩进非常有助于识别错误(none 这里,但一般来说)
- 使用更好的变量名:
$ip
比$line
更有意义
- 变量进入内部引号
- 括号引入了子shell,这会降低性能。只在必要时使用