Bash-скрипт для настройки ОС Linux

Bash-скрипт для настройки ОС Linux

Я работаю над скриптом 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
Также обратите внимание на кавычки вокруг $value3, которые также необходимы для обработки 7.8, которая была возвращена в моем случае Debian 7.8, как строки.

Если вы хотите сравнить только основной номер версии, вы также можете удалить часть после точки:
value3=$(lsb_release -sr | cut -d. -f1)
Это разделит строку, возвращаемую в lsb_release -sr, .которую мы определили как разделитель с -d.параметром, а затем выберет первый столбец результата с -f1.
Это также работает со значением 4:
value4=$(cat /etc/debian_version | cut -d. -f1)
Это обрезает вывод my /etc/debian_version, который был 7.8до и 7после добавления cut.

Вы также можете захотеть отключить предупреждения для несуществующих файлов. У меня нет доступной системы RedHat, поэтому я перенаправил сообщения об ошибках из первых двух команд вот /dev/nullтак:
value1=$(cat /etc/redhat-release 2> /dev/null | awk '{ print $4 }' | cut -c 1 )

Дайте мне знать, если вам нужна какая-либо другая помощь. Также, пожалуйста, добавьте некоторые выходные данные и, возможно, даже ожидаемые выходные данные вашего скрипта, чтобы мы могли увидеть, в чем ваша проблема.

Связанный контент