用于设置 Linux 操作系统的 Bash 脚本

用于设置 Linux 操作系统的 Bash 脚本

我正在编写一个 bash 脚本,遇到了一个问题。我正在利用我所知道的普通 if/fi 语句,并尝试使用它们来设置与选择操作系统版本相关的变量,例如 RH 7、Debian 7、Ubuntu 等。我遇到的问题是,它并没有像我想象的那样工作。我手动运行每个部分,它运行良好,但是当我把所有内容都放在脚本中时,什么都没有。

有没有更好的方法可以做到这一点?提前谢谢

value1=$(cat /etc/redhat-release | awk '{ print $4 }' | cut -c 1)
value2=$(cat /etc/redhat-release | awk '{ print $3 }' | cut -c 1)
value3=$(lsb_release -sr)
value4=$(cat /etc/debian_version)
if [[ $value1 -eq 7 ]] && [[ -e /etc/redhat-release ]]; then
        OS=RedHat
        VER=RH7
elif [[ $value2 -eq 6 ]] && [[ -e /etc/redhat-release ]]; then
        OS=RedHat
        VER=RH6
elif [[ $value3 = 14.04 ]]; then
        OS=Ubuntu
        VER=UB1404
elif [[ -e /etc/debian_version ]] && [[ $value4 -eq 7 ]]; then
        OS=Debian
        VER=DEB7
fi

答案1

我认为您的问题可能是浮点数和字符串比较方面的问题。
据我所知,测试无法处理浮点值,因此您的测试$value3 = 14.04将给出一个syntax error: invalid arithmetic operator (error token is ".04")

您可以像这样将数字视为字符串:
elif [[ "$value3" == "14.04" ]]; then
还要注意,周围的引号,这对于将(在我的 debian 7.8 情况下返回的)视为字符串$value3也是必要的。7.8

如果您只想比较主版本号,也可以删除点后的部分:这将使用参数分割我们定义为分隔符的返回
value3=$(lsb_release -sr | cut -d. -f1)
字符串,然后使用选择结果的第一列。 这也适用于value4:这将剪切添加之前和之后的 我的输出。lsb_release -sr.-d.-f1

value4=$(cat /etc/debian_version | cut -d. -f1)
/etc/debian_version7.87cut

您可能还想抑制不存在文件的警告。我没有可用的 redhat 系统,因此我将前 2 个命令的错误消息重定向为/dev/null如下内容:
value1=$(cat /etc/redhat-release 2> /dev/null | awk '{ print $4 }' | cut -c 1 )

如果您需要任何其他帮助,请告诉我。另外,请添加一些输出,甚至是脚本的预期输出,以便我们了解您的问题所在。

相关内容