用於設定 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

我認為你的問題可能是浮點數和字串比較的一些問題。
AFAIK,測試無法處理浮點值,因此您的測試$value3 = 14.04將為您提供一個syntax error: invalid arithmetic operator (error token is ".04").

您可以像這樣將數字視為字串:
elif [[ "$value3" == "14.04" ]]; then
另請注意 周圍的引號,這對於將在我的 debian 7.8 中返回的$value3視為字串也是必要的。7.8

如果你只想比較主版本號,你也可以去掉點後面的部分:這將用參數分割我們定義為分隔符號的at
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 )

如果您需要任何其他幫助,請告訴我。另外,請添加一些輸出,甚至可能是腳本的預期輸出,以便我們可以看到您的問題出在哪裡。

相關內容