脚本;如果状态是这样,则执行该操作,如果不执行其他操作

脚本;如果状态是这样,则执行该操作,如果不执行其他操作

我需要编写一个脚本来检查某些东西的状态。如果状态为“正在复制”,则退出(或者如果我们想要花哨的话,请在 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

相关内容