我正在编写脚本,如果应用程序正在运行应该做什么也应该有一个检查计时器(60秒)问题是“if”语句检查“计数”不起作用。
这是一个脚本:
#!/bin/bash
osascript -e "do shell script \"
COUNT="0"
while true;
do
if (ps aux | grep Skype | grep -v grep > /dev/null)
then
echo "RUNNING" > /Users/someuser/Desktop/RUNNING.txt
else
echo "STOPPED" > /Users/someuser/Desktop/STOPPED.txt
fi
sleep 1
if (("$COUNT" > "60"))
then
exit 0
fi
done
\" with administrator privileges"
答案 0 :(得分:0)
您正在混合使用osascript和shell脚本,为什么不使用shell脚本?
如果你这样做的话,这里可能有用。这只是一个演示如何使用经过的秒数更新Count变量。
COUNT=0
datum=$(/bin/date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s")
sleep 5
diff=$(expr $(/bin/date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s") - $datum)
COUNT=$(expr $COUNT + $diff )
echo COUNT:$COUNT
我只是“采购”它,你必须添加sheebang行#!/bin/bash
你的第二个问题是if测试,应该/可能是if [ $COUNT -gt 60 ]; then
我希望这有帮助,可以通过终端窗口中的man bash
访问bash手册。
答案 1 :(得分:0)
你用双引号定义osascript。这允许在osascript程序开始之前扩展$COUNT
变量。使用单引号或引用的here-doc代替
#!/bin/bash
osascript <<'END_OSA'
do shell script '
for (( c=0; c <= 60; c++ )); do
if ps aux | grep -q '[S]kype'; then
echo "RUNNING" > /Users/someuser/Desktop/RUNNING.txt
else
echo "STOPPED" > /Users/someuser/Desktop/STOPPED.txt
fi
sleep 1
done
' with administrator privileges
END_OSA
嗯,我的重构完全删除了所有$vars
。
答案 2 :(得分:0)
以下是我用计数器编写bash脚本的方法。您可以使用它将其转换为osascript命令。您会在代码中注意到,您不会递增计数器,因此它永远不会达到60。
祝你好运。#!/bin/bash
COUNT=1
while true;
do
sleep 1
echo "Counter: $COUNT"
if (( $COUNT >= 20 ))
then
exit 0
fi
COUNT=$((COUNT+1))
done