添加文本但首先检查它是否已经存在以防止重复

添加文本但首先检查它是否已经存在以防止重复

我有一个可以运行以修复任何网络问题的脚本

echo '            routes:' >> /etc/netplan/50-cloud-init.yaml
echo '            - to: 51.89.XXX.XXX/32' >> /etc/netplan/50-cloud-init.yaml
echo '              via: 0.0.0.0' >> /etc/netplan/50-cloud-init.yaml
echo '              scope: link' >> /etc/netplan/50-cloud-init.yaml
echo '            - to: 2XXX:41d0:XX0:XXff:ff:ff:ff:ff' >> /etc/netplan/50-cloud-init.yaml
echo '              scope: link' >> /etc/netplan/50-cloud-init.yaml

但是,如果这些值已经设置,我该如何防止它运行两次?我想编写脚本首先检查每行是否存在,如果存在则不会添加它们。

答案1

我想到最简单的方法是首先发出一个grep调用,将文本添加到文件本身,然后使用||(OR)运算符,然后echo ' ' >>像这样发出调用:

grep '            routes:' /etc/netplan/50-cloud-init.yaml || echo '            routes:' >> /etc/netplan/50-cloud-init.yaml

仅当文件中尚不存在文本时才会添加该文本。

||只有当前面的命令失败时,才会执行后面的命令。

这意味着如果

grep '            routes:' /etc/netplan/50-cloud-init.yaml

无法返回结果,这意味着文本不在文件中,

然后

echo '            routes:' >> /etc/netplan/50-cloud-init.yaml

将会执行,并且文本将会被添加。

否则,如果文本已经在文件中,则不会添加任何内容。

这必须用于在添加之前要检查的每一行文本。

相关内容