0

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

3 回答 3

0

您在双引号中定义 osascript 。这允许在$COUNTosascript 程序甚至启动之前扩展变量。改用单引号或引用的 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完全删除了。

于 2015-03-04T16:30:02.557 回答
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
于 2015-03-04T16:39:34.340 回答
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 手册。

于 2015-03-04T16:24:11.043 回答