我需要编写一个脚本来检查某些东西的状态。如果状态为“正在复制”,则退出(或者如果我们想要花哨的话,请在 60 分钟后重试。)如果没有返回任何内容(基于我的第二个命令,即一切都同步),则执行其他操作。
如果复制;退出或重试 60 If NULL;做更多的事情。
root@box:~$ ./prog status
PyDsk /home In Sync
PyDsk /trax Copying 85% complete
PyDsk /trax2 In Sync
PyDsk /trax3 Copying 97% complete
PyDsk /traxnl Copying 50% complete
PyDsk /traxnl2 Copying 69% complete
PyDsk /traxnl3 Copying 56% complete
PyDsk /traxnl4 In Sync
PyDsk /traxnv In Sync
PyDsk /traxnv2 In Sync
PyDsk /ulog In Sync
root@box:~$ ./prog status | grep complete | awk '{print $3;}'
Copying
Copying
Copying
Copying
Copying
编辑;我愿意接受任何其他方式来完成这件事。我并没有接受我开始做事的方式……这只是我能想到的唯一方法。如果有更优雅的东西,我会接受:)
答案1
你可以做一些更简单的事情,如下所示:
[[ -n $(./prog status | awk '/complete/ {print $3}') ]] && echo "foo"
如果命令的输出为空,则此行只会回显“foo”。
答案2
很可能有人会提出更优雅的解决方案,但这是我的;
#!/bin/bash
count=`./prog status | grep complete | awk '{print $3}' | wc -l`
zero="0"
if [ "$count" -eq "$zero" ]
then echo "all done."
else echo "wait a little more and try again."
fi
计数变量是复制操作的次数。如果 count 等于 0,这意味着没有正在进行的复制操作,则脚本会打印 all done,否则会打印 wait a little more and try again。您可以使用自己的命令更改包含 echo 的行。
答案3
完成似乎仅在复制状态下出现。因此,检查两者中的哪一个并不重要。
while ( ./prog status|grep -qw complete 2>/dev/null )
do
echo Waiting one hour for copy to complete.
sleep 3600
# or exit if you like to
done
# Synced, do whatever is to be done