我有一个可以运行以修复任何网络问题的脚本
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
将会执行,并且文本将会被添加。
否则,如果文本已经在文件中,则不会添加任何内容。
这必须用于在添加之前要检查的每一行文本。