linux - 我的第一个 Bash 脚本看起来效率不高

标签 linux bash scripting automation suse

这是我使用网上找到的一些资源的第一个 bash 脚本。我认为有更好的方法可以使用其他形式的条件来编写此代码(if then 与控制运算符)。

这是一个基本上检查主机是启动还是关闭(检查它是否可 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 < $1 

谢谢!

最佳答案

你完全可以不用括号:

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

关于linux - 我的第一个 Bash 脚本看起来效率不高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283309/

相关文章:

android/storage/emulated/0 和/data/media/0 权限不同

linux - 如何测量dtach的时间

linux - 在 linux 上使用 cat 命令通过标准输入读取二进制数据

linux - Bash标准输出同时显示和重定向

linux - 编写 Linux 脚本以一次安装多个程序

linux - 未送达的邮件退回给发件人-域不同的目的地

linux - 使用 df 和 awk 查找分区大小

linux - 如何使用 Bash 更改类型为 "find"的文件的扩展名?

windows - Autohotkey(ahk)GUI十字线实现

c++ - 在 C++ 应用程序中嵌入 Ruby 解释器