Bash Script para configurar el sistema operativo Linux

Bash Script para configurar el sistema operativo Linux

Estoy trabajando en un script bash y encontré un problema. Estoy impulsando lo que sé usando declaraciones if/fi normales y tratando de usarlas para configurar variables relacionadas con la selección de la versión del sistema operativo, como RH 7, Debian 7, Ubuntu, etc. El problema que tengo es que simplemente no funciona como pensé. Ejecuto cada parte a mano y funciona bien, pero cuando pongo todo en un script, nada.

¿Hay una mejor manera de hacer esto? gracias de antemano

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

Respuesta1

Creo que su problema podría ser algunos problemas con la comparación de flotadores y cadenas.
AFAIK, la prueba no puede manejar valores flotantes, por lo que su prueba $value3 = 14.04le dará un archivo syntax error: invalid arithmetic operator (error token is ".04").

Podrías tratar los números como cadenas de esta manera:
elif [[ "$value3" == "14.04" ]]; then
Observa también las comillas alrededor de $value3, que también son necesarias para tratar el archivo 7.8, que fue devuelto en mi caso de Debian 7.8, como una cadena.

Si desea comparar solo el número de versión principal, también puede eliminar la parte después del punto:
value3=$(lsb_release -sr | cut -d. -f1)
esto dividirá la cadena devuelta lsb_release -sren la .que definimos como delimitador con el -d.parámetro y luego seleccionará la primera columna del resultado con -f1.
Esto también funciona con value4:
value4=$(cat /etc/debian_version | cut -d. -f1)
esto corta la salida de my /etc/debian_versionque estaba 7.8antes y 7después de agregar el archivo cut.

También es posible que desee suprimir las advertencias de archivos inexistentes. No tengo un sistema Redhat disponible, así que redirigí los mensajes de error de los primeros 2 comandos para que /dev/nullme gusten esto:
value1=$(cat /etc/redhat-release 2> /dev/null | awk '{ print $4 }' | cut -c 1 )

Déjame saber si necesitas cualquier otra ayuda. También agregue algunos resultados y tal vez incluso los resultados esperados de su secuencia de comandos para que podamos ver dónde está su problema.

información relacionada