bash - 在 bash elif (FreeNAS) 中组合两个命令
问题描述
我真的很抱歉再次因为我的问题而惹恼你,但我似乎快要结束了。我的目标是创建一个 bash 脚本来检查 IP 地址是否仍然在线或正在进行清理,如果不是,我的系统会关闭。我的脚本,目前正在使用,看起来像这样
#!/bin/bash
hosts=(
10.10.0.100 #Client 1
10.10.0.101 #Client 2
10.10.0.102 #Client 3
10.10.0.103 #Client 4
10.10.0.104 #Client 5
)
for host in "${hosts[@]}"; do
if ping -c 1 -i 1 "$host" >/dev/null; then
echo "No Shutdown - At least one PC ($host) is online"
exit 0
fi
done
echo "No PC is online - Shutdown"
bash shutdown -p now
我做了一些研究,发现了以下命令,以检查我的擦洗是否正在进行中
if [ $(zpool status | grep 'scrub in progress') ]; then
echo "No Shutdown - Scrub in progess"
exit 0
fi
但是我在将这两者结合起来时遇到了问题。我希望我的脚本首先检查 IP,如果它们都处于脱机状态,则在关闭机器之前检查是否有清理。因此,两个 if-case 都必须为 false(ips 离线并且清理不在进行中),但它们应该按时间顺序处理,如果第一个 if-case 返回一个在线的 IP,则脚本应该停止。
也许有人可以帮助我?
解决方案
要检查命令输出是否包含字符串,只需:
if zpool status | grep -q 'scrub in progress'; then
[ $(zpool status | grep 'scrub in progress') ]
无效。将$( .. )
扩展为多个单词并将运行[ scrub in progress ]
. 因为in
不是 的有效运算符[
,所以[
将打印一条错误消息并以 退出2
。只需检查 grep 的错误状态。
推荐阅读
- javascript - Adobe Reader 上的无效签名:“签名者的身份尚未验证”
- ubuntu - 如何调试我的 Tex 安装以使 XeLatex 可以在 Ubuntu 20.04 上运行?
- c# - 如何将 Pascal Case with Numbers 转换为句子?
- cmake - CMake:如何构建通过 add_subdirectory() 为 find_package() 导出的多个项目
- kubernetes - 运行 terraform apply 会导致未经授权的 Kubernetes 提供商在 Azure 云中部署 k8s 资源
- arrays - 尝试使用指针和结构从我的列表中删除产品
- wordpress - 有人用过 Brython 和 Wordpress 吗?
- vba - 多行VBA
- python - Python Flask-sqlAlchemy Prepapre 查询
- python - 名称事件未定义