我写了下面一行作为bash:
nmcli nm status id "My VPN id"> /home/Desktop/1.txt
所以我想检查ID状态并将其保存在1.txt
文件中。
现在我想在1.txt
文件中search,如果它发现"connected"
一词,那么什么也不做,如果它没有find它运行以下行:
nmcli con up id "My VPN id"
我如何编写search部分?
编辑:我在桌面上的文档(名称为"s.sh"
上做了一个bash脚本,如下所示:
#!/bin/sh nmcli nm status id 1> /home/Desktop/1.txt grep -q connected /home/Desktop/1.txt || nmcli con up id 1
并编辑crontab,如下所示:
保存文件。 但是cron不起作用!
仅当connected
不在1.txt
时才执行命令:
grep -q connected /home/Desktop/1.txt || nmcli con up id "My VPN id"
如果在file
找到正则表达式string
grep string file
将返回退出代码0(成功)。 要仅在grep
返回失败时执行命令,我们使用shell的逻辑或||
。
作为替代,我们可以使用完整的if-then语句:
if ! grep -q connected /home/Desktop/1.txt then nmcli con up id "My VPN id" fi
同样,如果grep -q connected /home/Desktop/1.txt
返回失败,我们只想运行命令。 要做到这一点,我们使用!
否定返回码。 这样,如果grep
返回一个失败代码,命令将运行。
grep
的-q
选项告诉grep
安静。 当与-q
,而不是打印输出时, grep
将简单地设置一个返回码。
要按小时运行此命令,请运行crontab -e
。 这将引发一位编辑。 在编辑器中,添加以下行:
0 * * * * /bin/grep -q connected /home/Desktop/1.txt || /path/to/nmcli con up id "My VPN id"
现在,保存文件并退出编辑器。
有关非常有用的crontab
更多信息,请参见此处 。
while sleep 60m do grep -q connected /home/Desktop/1.txt || nmcli con up id "My VPN id" done