Bash:我如何检查命令

时间:2016-07-24 21:26:12

标签: bash scripting conditional

我是bash脚本的新手,想写一个简短的脚本,检查某个程序是否正在运行。如果它运行,脚本应该将窗口带到前台,如果它没有运行,脚本应该启动它。

#!/bin/bash

if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then
    /opt/google/chrome/google-chrome --profile-directory=Default --app-id=ojcflmmmcfpacggndoaaflkmcoblhnbh
else
    wmctrl -a Wunderlist
fi

我的比较是错误的,但我甚至不确定我应该谷歌找到解决方案。我的想法是,如果窗口不存在,"$(wmctrl -l | grep Wunderlist)"将返回一个空字符串。运行脚本时出现此错误:

~/bin » sh handle_wunderlist.sh                                       
handle_wunderlist.sh: 3: [: =: argument expected

2 个答案:

答案 0 :(得分:4)

][)命令的结束参数test之前需要一个空格:

if [ "$(wmctrl -l | grep Wunderlist)" = "" ]; then
    ....
else
    ....
fi

作为旁注,您已将shebang用作bash,但使用sh(可能是dash从错误消息中运行脚本。)

答案 1 :(得分:3)

替换:

if [ "$(wmctrl -l | grep Wunderlist)" = ""]; then

使用:

if ! wmctrl -l | grep -q Wunderlist; then 

grep将其退出条件设置为true(0)是找到的匹配项,如果不是1,则为!}。因为你想要反之,我们在命令的开头放置-q来反转退出代码。

通常,grep会将匹配的文本发送到标准输出。我们不想要那个文字,我们只是想知道是否有匹配。因此,我们添加了grep选项以使grep -q安静。

实施例

说明在if声明中使用$ if ! echo Wunderlist | grep -q Wunderlist; then echo Not found; else echo Found; fi Found $ if ! echo Wunderabcd | grep -q Wunderlist; then echo Not found; else echo Found; fi Not found

{{1}}