Para obtener OS y VER , el último estándar parece ser /etc/os-release .Antes de eso, había lsb_release y /etc/lsb-release . Antes de eso, tenías que buscar diferentes archivos para cada distribución.
Esto es lo que sugeriría
if [ -f /etc/os-release ]; then
# freedesktop.org and systemd
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
# linuxbase.org
OS=$(lsb_release -si)
VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
# For some versions of Debian/Ubuntu without lsb_release command
. /etc/lsb-release
OS=$DISTRIB_ID
VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
# Older Debian/Ubuntu/etc.
OS=Debian
VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
# Older SuSE/etc.
...
elif [ -f /etc/redhat-release ]; then
# Older Red Hat, CentOS, etc.
...
else
# Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
OS=$(uname -s)
VER=$(uname -r)
fi
Creo que uname para obtener ARCH sigue siendo la mejor manera. Pero el ejemplo que diste obviamente solo maneja sistemas Intel. Yo lo llamaría BITS así:
case $(uname -m) in
x86_64)
BITS=64
;;
i*86)
BITS=32
;;
*)
BITS=?
;;
esac
O cambia ARCH para ser las versiones más comunes, pero inequívocas:x86 y x64 o similar:
case $(uname -m) in
x86_64)
ARCH=x64 # or AMD64 or Intel64 or whatever
;;
i*86)
ARCH=x86 # or IA32 or Intel32 or whatever
;;
*)
# leave ARCH as-is
;;
esac
pero, por supuesto, eso depende de ti.
Iría con esto como primer paso:
ls /etc/*release
Gentoo, RedHat, Arch y SuSE tienen un archivo llamado p. /etc/gentoo-release . Parece ser popular, consulte este sitio sobre archivos de lanzamiento.
Debian y Ubuntu deberían tener un /etc/lsb-release que también contiene información de lanzamiento y se mostrará con el comando anterior.
Otro rápido es uname -rv . Si el kernel instalado es el kernel de distribución estándar, normalmente a veces encuentra el nombre allí.
lsb_release -a . Funciona en Debian y supongo que en Ubuntu, pero no estoy seguro del resto. Normalmente debería existir en todas las distribuciones GNU/Linux ya que está relacionado con LSB (Linux Standard Base).