我目前正在从一个外部硬盘运行archlinux,所以我试图在bash中编写一个脚本,使我可以更改视频驱动程序,而不必每次从另一台计算机启动时浏览配置文件。
我在台式机上使用nvidia或nouveau,但在女朋友的笔记本电脑上使用intel。因此,我使用sed编写了一个bash脚本,该脚本将当前驱动程序输出到一个名为$vcard的变量,而我要更改为的驱动程序将是脚本的第一个参数($1,然后)。
我的问题是,我正在努力使这个安全,这样我就不会意外地将包含nvidia、nouveau或intel的字符串换成任何不是这三个字符串的字符串。我认为最好的方法是进行一系列的if-else比较,如下所示。

if [ "$1" = "$VCARD" ]
then
    echo "Already using $VCARD driver."
else
    if [ "$1" = "nouveau" or "intel" or "nvidia" ]  #This is the line that concerns me.
    then
        sed -i -e "7s#\(nouveau\|intel\|nvidia\)#$1#" /etc/X11/xorg.conf.d/10-monitor.conf
        echo "New driver is now $1."
    else
        echo "You don't want to put that string there. (try nouveau, intel or nvidia)"
    fi
fi

当你想把条件句放在中间的逻辑或门中时,条件句是如何工作的?
警察:是的,我在用作为sed命令的分隔符,我希望这对任何人都没有影响。

最佳答案

你有两种可能的方法。
一:
if [ "$1" = "nouveau" -o "$1" = "intel" -o "$1" = "nvidia" ]
二:
if [[ "$1" = "nouveau" || "$1" = "intel" || "$1" = "nvidia" ]]
就我个人而言,我更喜欢第二个。它更接近于其他编程语言所使用的语言,它将被更广泛的程序员所理解。
编辑:谢谢@etan reisner的帮助评论。在决定选择哪一个选项时,应该考虑到这一点。

08-28 00:11