插入 #!/bin/sh 时未发现错误

Mic*_*age 1 shell terminal

我开始学习 Linux shell 脚本,当我写这个脚本时出现错误,

./my_script: 4: read: Illegal option -n
./my_script: 5: ./my_script: [[: not found
Run Code Online (Sandbox Code Playgroud)

我发现它是因为 #!/bin/sh行,我仍然可以在没有该行的情况下运行脚本,但它不会执行诸如/n 之类的代码

#!/bin/sh
# Shell installer for gurb customizer. by Naveen Gamage.

OS=$(lsb_release -si)
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VER=$(lsb_release -sr)

grabninstall() {
    sudo add-apt-repository ppa:danielrichter2007/grub-customizer
    sudo apt-get update
    sudo apt-get install grub-customizer    
}

echo "Installer for GRUB CUSTOMIZER\n"
echo "GURB CUSTOMIZER"
echo "A tool for editing and configuring boot menu (GRUB2/BURG).\n"

read -p "Do you want to install Grub Customizer for $OS ${VER} [$ARCH] ? (Y/n) " -n 1

if [[ $REPLY =~ ^[Yy]$ ]]
then
    echo "The installer is downloading and installing GRUB Customizer!";
    echo "This action may require your password.\n";
    grabninstall
else
    echo "user quit"
    echo "Installation was unsuccessful."
fi
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu 12.10 上这样做。

其SH给出了这样的输出

/bin/sh
Run Code Online (Sandbox Code Playgroud)

知道我哪里做错了吗?

dog*_*ane 5

问题是您正在使用/bin/sh该脚本并在您的系统上运行/bin/sh -> dash。这意味着dash正在执行您的脚本。在dash外壳不支持[[,但bash确实。因此,您应该将脚本中的第一行(称为Shebang)从#!/bin/sh更改为#!/bin/bash

或者,不要[[在脚本中使用。仅使用dash.

另请参阅此 Ubuntu 页面,了解dash.