Ok, så här blev det, eller rättare sagt, så här ser det ut nu...
Bara att kopiera och använda för den som vill. Det är varken kompakt eller smartkodat, men däremot skrivet för att vara robust, dynamiskt, lätt att underhålla och lätt att modifiera...
Kod: Markera allt
#! /bin/bash
# --
# --
# -- NAMN
# --
# -- dist - Visa vilken distribution av Linux eller version av Unix som för
# -- tillfället är igång.
# --
# -- Programmet togs ursprungligen fram för att vi behövde ett sätt att i
# -- våra andra script kunna kolla vilket operativsystem som för tillfället
# -- är igång. Meningen med detta är att göra det möjligt att använda ett och
# -- samma script i flera olika versioner av Linux och Unix, trots de små
# -- skillnader som finns.
# --
# -- Med hjälp av detta program kan man då kontrollera vad det är som är
# -- igång och sedan styra de små skillnaderna med vilkor i sina egna script.
# --
# --
# -- FORMAT
# --
# -- dist -chilrs
# --
# --
# -- PARAMETRAR
# --
# -- Förutom -h och --help så är det bara under Linux som parametrarna har
# -- någon betydelse. Under Unix ignoreras de och påverkar inte funktionen
# -- på något sätt.
# --
# -- Orsaken till detta är att under t.ex Unix ger kommandot "uname -s" ett
# -- godtagbart namn på vilket operativsystem det är som körs, medan det
# -- under Linux bara skriver ut "Linux" och inget om vilken distribution
# -- det egentligen är.
# --
# -- -c, --contents
# --
# -- Försöker få fram information ur innehållet i filen /etc/*-release,
# -- detta kan jämföras med -r som bara tittar på namnet på denna fil.
# -- För t.ex openSUSE, så heter filen SuSE-release och man får gå in
# -- och titta på innehållet för att se att det handlar om openSUSE. För
# -- Chakra däremot så heter filen arch-release, samtidigt som den inte
# -- innehåller något och -r ger alltså då "Arch" medan -c inte ger
# -- något alls.
# --
# -- Alltså är -c att föredra för t.ex openSUSE, medan -r är ett bättre
# -- val för Chakra.
# --
# -- -h, --help
# --
# -- Visar en kort beskrivning av vilka möjligheter och funktioner
# -- som finns.
# --
# -- -i, --issue
# --
# -- Försöker hämta information från /etc/issue. Om filen inte finns
# -- eller om den är tom så returneras ett fel, annars försöker detta
# -- programmet att använda sig av informationen i den.
# --
# -- Värt att tänka på här är att innehållet i den här filen är inte
# -- på något sätt standardiserat, utan den kan i princip innehålla
# -- godtycklig information. Normalt sett är -r eller -c ett bättre
# -- val, men för t.ex Ubuntu ger -i ett bättre resultat.
# --
# -- -l, --lsb
# --
# -- Programmet försöker använda kommandot "lsb_release" för att
# -- hämta information. Om kommandot inte är installerat i det aktuella
# -- systemet så returneras ett fel, annars den information som kommandot
# -- gav.
# --
# -- Om detta kommando finns installerat så ger det ofta den mest korrekta
# -- informationen av vilken distribution som är aktuell.
# --
# -- -r. --release
# --
# -- Tittar på vad filen /etc/*-release heter. För Fedora heter den t.ex
# -- fedora-release och för Mandriva heter den mandriva-release. Se för
# -- övrigt -c ovan som beskriver mer om detta.
# --
# -- -s, --sum
# --
# -- Skriver bara ut "Linux" om det handlar om Linux och går inte in och
# -- försöker titta nogrannare på vilken distribution det är. I vissa
# -- fall kan det räcka med det här om man t.ex använder det i en miljö
# -- blandad av Linux och Unix. Man kan också använda den som en "sista
# -- utväg" om ingen annan information finns, genom att ange den sist i
# -- en rad av alternativ, som t.ex "-lrcis".
# --
# -- Man får alltså prova sig fram för att se vilken variant som ger bäst resultat
# -- för det system man kör programmet i.
# --
# -- Det är möjligt att blanda olika alternativ och att t.ex ange "-l -r -i" och
# -- dessa behandlas då i den ordning de är angivna. Så fort programmet hittar
# -- ett resultat som förefaller fullgott så avslutas exekveringen, oavsett om
# -- övriga alternativ är behandlade eller inte. På grund av detta kan resultatet
# -- påverkas mycket av ordningen på alternativen och även här får man prova sig
# -- fram.
# --
# -- Genom att exekveringen avbryts när ett resultat som ser ok ut har hittats, så
# -- kan man ange flera olika alternativ för säkethets skull, men som sagt så spelar
# -- ordningen stor roll.
# --
# -- Om inga alternativ anges, så använder sig programmet som standard (by default)
# -- av "-l -r -c -i", i angiven ordning. Denna standard och ordning finns som en
# -- variabel (DEFAULT_OPTS) i början av programmet och kan ändras om man vill ha
# -- andra alternativ eller en annan ordning på dem.
# --
# -- På kommandorden kan "-l -r -c -i" anges som "-lrci" istället, medan de i
# -- variabeln i början av programmet måste anges som explicita alternativ.
# -- En annan regel är att variabeln måste avslutas med "--", vilket frmgår om man
# -- tittar på den nedan i början av programmet.
# --
# -- Skulle man vilja så är det givetvis lätt att bygga på programmet så att det
# -- även skriver ut versionen av distributionen, men utifrån det vi använder det
# -- till så har detta inte varit aktuellt.
# --
# -- I dagsläget har vi själva inte till 100% kunnat testa programmet för alla
# -- Unix-varianter, men det bör gå lätt att ordna till de eventuella felaktigheter
# -- som finns.
# --
# --
# -- RETURSTATUS
# --
# -- Avslutar med status 0 om allt går bra, annars 2.
# --
# --
# -- SKRIVEN AV
# --
# -- Enargo Konsult, Fallkenberg Sweden -- http://www.enargo.com/it
# --
# --
# ------------------------------------------------------------------------
# -- This program is free software: you can redistribute it and/or modify
# -- it under the terms of the GNU General Public License as published by
# -- the Free Software Foundation, either version 3 of the License, or
# -- (at your option) any later version.
# --
# -- This program is distributed in the hope that it will be useful,
# -- but WITHOUT ANY WARRANTY; without even the implied warranty of
# -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# -- GNU General Public License for more details.
# --
# -- You should have received a copy of the GNU General Public License
# -- along with this program. If not, see <http://www.gnu.org/licenses/>.
# ------------------------------------------------------------------------
#
#
DEFAULT_OPTS="-l -r -c -i --"
#
function usage {
more << eof_usage
-c - Check contents of /etc/*-release
-h - Show this
-i - Check contents of /etc/issue
-l - Check output from lsb_release
-r - Check name of /etc/*-release
-s - In case of Linux just print 'Linux'
eof_usage
}
function lsb {
lsb=$(which lsb_release) > /dev/null 2>&1
if [[ $lsb != "" ]]; then
OS_NAME=$(lsb_release -d | awk '{ print $2 }')
return 0
else
return 2
fi
}
function issue {
if [ -e /etc/issue ]; then
if [ ! -z /etc/issue ]; then
OS_NAME=$(strings /etc/issue |\
head -1 |\
sed 's/Welcome to //g' |\
awk '{ \
print $1
}')
else
return 2
fi
else
return 2
fi
return 0
}
function release {
for dist in /etc/*-release; do
if [[ -e $dist ]]; then
if [[ ! -h $dist ]]; then
if [[ $(basename $dist) != "lsb-release" ]]; then
if [[ $RTYPE == 0 ]]; then
name=$(basename $dist|awk -F- '{ print $1 }')
OS_NAME=$(for i in $name; do \
B=`echo -n "${i:0:1}" |\
tr "[:lower:]" "[:upper:]"`;\
echo -n "${B}${i:1} ";\
done)
return 0
else
lines=$(cat $dist|wc -l)
if [[ $lines -ge 1 ]]; then
name=$(head -1 $dist|awk '{ print $1 }')
OS_NAME=$(for i in $name; do \
B=`echo -n "${i:0:1}" |\
tr "[:lower:]" "[:upper:]"`;\
echo -n "${B}${i:1} ";\
done)
return 0
fi
fi
fi
fi
fi
done
return 2
}
OS=$(uname -s)
if [[ $OS == "Linux" ]]; then
FOUND_OS=false
if [[ $@ != "" ]]; then
PARAMS=`getopt -a -o hilrcs --long lsb,release,issue,contents,sum,help -n 'dist' -- "$@"`
if [[ $? != 0 ]]; then
exit $?
fi
else
PARAMS=$DEFAULT_OPTS
fi
eval set -- "$PARAMS"
while true; do
case $1 in
-i|--issue)
issue
if [[ $? == 0 ]]; then
FOUND_OS=true
break
fi
shift
;;
-l|--lsb)
lsb
if [[ $? == 0 ]]; then
FOUND_OS=true
break
fi
shift
;;
-r|--release)
RTYPE=0
release
if [[ $? == 0 ]]; then
FOUND_OS=true
break
fi
shift
;;
-c|--contets)
RTYPE=1
release
if [[ $? == 0 ]]; then
FOUND_OS=true
break
fi
shift
;;
-s|--sum)
OS_NAME="Linux"
FOUND_OS=true
break
;;
-h|--help)
usage
break
;;
--)
shift
break
;;
*)
echo "Unknown -- "$1
break
;;
esac
done
elif [[ $OS == "AIX" ]]; then
# Mer info finns via "oslevel".
OS_NAME="AIX"
FOUND_OS=true
elif [[ $OS == "SunOS" ]]; then
# Mer info finns via "uname".
OS_NAME="Solaris"
FOUND_OS=true
elif [[ $OS == "HP-UX" ]]; then
OS_NAME="HP-UX"
FOUND_OS=true
elif [[ $OS == "OSF1" ]]; then
OS_NAME="Tru64"
FOUND_OS=true
elif [[ $OS == "FreeBSD" ]]; then
OS_NAME="FreeBSD"
FOUND_OS=true
elif [[ $OS == "OpenBSD" ]]; then
OS_NAME="OpenBSD"
FOUND_OS=true
elif [[ $OS == "NetBSD" ]]; then
OS_NAME="NetBSD"
FOUND_OS=true
fi
if [[ $FOUND_OS == true ]]; then
echo $OS_NAME
exit 0
fi
exit 2