IF语句在osascript中无法正常工作

时间:2015-03-04 15:47:56

标签: bash applescript osascript

我正在编写脚本,如果应用程序正在运行应该做什么也应该有一个检查计时器(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"

3 个答案:

答案 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