【问题标题】:Script for adding a disk to fstab if not existing将磁盘添加到 fstab 的脚本(如果不存在)
【发布时间】:2015-12-23 01:07:25
【问题描述】:

首先,我已经阅读了许多带有 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

提前感谢您的帮助。这些是类似的帖子,对我没有进一步的帮助:

【问题讨论】:

  • 看来你需要反转then..else的内容
  • 我也尝试过反转。 grep -q "poky-disc" "$fstab"grep "poky-disc" "$fstab"
  • 到底是什么问题?
  • 哦该死的你的影响我发现-q 不是反转的选项,但只是暂停输出,一个简短的man grep 帮助了我。我正在阅读有关路径和 grep 的主题...

标签: bash path grep


【解决方案1】:

这里有一个简单且有希望地道的解决方案。

grep -q 'init-poky' /etc/fstab || 
printf '# init-poky\n/dev/sdb1    /media/poky    ext4    defaults    0    2\n' >> /etc/fstab

如果grep -q 的退出状态为false,则执行printf|| 速记可以拼写为

if grep -q 'ínit-poky' /etc/fstab; then
    : nothing
else
    printf ...
fi

许多初学者没有意识到if 的参数是一个命令,其退出状态决定了将采用then 分支还是else 分支。

【讨论】:

    【解决方案2】:

    优雅短途:

    #!/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
    

    它使用本机 Bash 命令退出代码($?=0 表示成功,>0 表示错误代码),如果 grep 产生错误,表示 NOT FOUND,它会反转 (!) 结果,并添加 fstab 条目。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。我设法用这个命令编辑它:

      sudo su -c "echo '#test' >> /etc/fstab"
      

      【讨论】:

        【解决方案4】:
        #!/bin/bash
        fstab=/etc/fstab
        
        if [[ $(grep -q "poky-disc" "$fstab") ]]
        # forgiving me for being a bit of over-rigorous, you might want to change this matching word, as below, 'poky-disc' merely a comment, not exactly a config line, so
        then
            echo "#poky-disc" >> /etc/fstab
            echo "/dev/sdb1 /media/poky ext4 defaults 0 2" >> /etc/fstab
        else
            echo "Entry in fstab exists."
        fi
        

        【讨论】:

        • 谢谢!您能否在这里解释一下第二行“fstab=/etc/fstab”的用法?
        • 创建一个fstab 变量在编写时没有多大意义。首先,它总是/etc/fstab,但即使要更改它也无济于事,因为您在使用变量时并不一致。
        • 这里的命令替换是完全错误的。您正在检查 grep -q 是否输出非空字符串,当然它永远不会这样做。你只想要if ! grep -q "poky-disc" "$fstab"; then
        • FWIW,此错误与 stackoverflow.com/questions/36371221/… 重复
        猜你喜欢
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-08
        • 1970-01-01
        相关资源
        最近更新 更多