在bash中search文件中的单词,如果单词存在,则执行某些操作

我写了下面一行作为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的

要按小时运行此命令,请运行crontab -e 。 这将引发一位编辑。 在编辑器中,添加以下行:

 0 * * * * /bin/grep -q connected /home/Desktop/1.txt || /path/to/nmcli con up id "My VPN id" 

现在,保存文件并退出编辑器。

有关非常有用的crontab更多信息,请参见此处 。

没有crontab

 while sleep 60m do grep -q connected /home/Desktop/1.txt || nmcli con up id "My VPN id" done