首先,我已经阅读了许多带有 if 子句的帖子(见底部)以在文件中搜索特定字符串并按照 1to1 的顺序关注这些帖子,但是我无法让我的脚本正常工作。/etc/fstab如果尚不存在,我想输入:
#!/bin/bash
fstab=/etc/fstab
if grep -q "poky-disc" "$fstab"
then
echo "#poky-disc" >> /etc/fstab
echo "/dev/sdb1 /media/poky ext4 defaults 0 2" >> /etc/fstab
else
echo "Entry in fstab exists."
fi
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助。这些是类似的帖子,并没有进一步帮助我:
优雅而简短的方式:
#!/bin/bash
if ! grep -q 'init-poky' /etc/fstab ; then
echo '# init-poky' >> /etc/fstab
echo '/dev/sdb1 /media/poky ext4 defaults 0 2' >> /etc/fstab
fi
Run Code Online (Sandbox Code Playgroud)
它使用本机 Bash 命令退出代码($?=0 表示成功,>0 表示错误代码),如果 grep 产生错误,则意味着未找到,它会反转 (!) 结果,并添加 fstab 条目。
这是一个简单且希望惯用的解决方案。
grep -q 'init-poky' /etc/fstab ||
printf '# init-poky\n/dev/sdb1 /media/poky ext4 defaults 0 2\n' >> /etc/fstab
Run Code Online (Sandbox Code Playgroud)
如果退出状态grep -q为false,则执行printf. 该||速记可以拼写为
if grep -q 'ínit-poky' /etc/fstab; then
: nothing
else
printf ...
fi
Run Code Online (Sandbox Code Playgroud)
许多初学者没有意识到,to 的参数if是一个命令,它的退出状态决定了是then分支还是else分支被采用。