PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 3wareclt (tw_cli) Command line passing


Arcanoxer
2010-02-25, 17:23:09
Hallo Community,

folgendes script (chk_3ware) habe ich bisher nach meinen wünschen angepasst:

#!/bin/sh
# Korrekten Pfad zur tw_cli setzen.
#
TWCLI="/opt/3wareclt32/tw_cli"


[ -x "$TWCLI" ] || {
echo "tw_cli not executable" | mail -s “RAID Warning” admin@mail.de
exit 1
}

com="`"$TWCLI" info c0 u0 status | awk '{print $4}'`"
echo "$com"
if [ "x$com" = "xOK" ];
then
:
else
echo "RAID Status not OK." | mail -s "RAID Warning" admin@mail.de
exit 1
fi

Es liest den status vom 3Ware Raid Controller aus (cronjob) und sendet eine e-mail, wenn ein fehler vorliegt.
Nun soll es so erweitert werden, daß es auch eine e-mail bei manuellen ausführen sendet, wenn der richtige parameter angegeben wurde (z.B. -m für mail).
./chk_3ware -m <e-mail>

Bin wie immer für jeden vorschlag offen. ;)


edit, mit getopts wäre wohl eine Option.

Gnafoo
2010-03-01, 00:20:10
Bei bash-Skripten kann man so etwas auch recht einfach mit einer while/case-Konstruktion zusammenbasteln:


#!/bin/bash

function show_help
{
cat << EOF
Options:
-m [arg] Specify mail address
--mail=[arg] Dito
--help Show this message
EOF
}

function parse_args
{
while [ -n "$1" ] ; do
case "$1" in
-m) mail_address=$2 ; shift ;;
--mail=*) mail_address=${1#--mail=} ;;
--help) show_help ; exit 1 ;;
esac

# Proceed to the next argument.
shift
done
}

mail_address=
parse_args "$@"

if [ "$mail_address" = "" ] ; then
echo "Please specify an e-mail address"
exit 1
fi

# ...
exit 0


shift springt dabei jeweils zum nächsten Argument (sprich $2 wird zu $1, $3 zu $2 usw.), daher braucht man es z. B. bei "-m", da hier zwei Parameter ins Spiel kommen. Die Schleife läuft dann, bis alle Argumente durchgegangen wurden, also bis "$1" leer ist.

Arcanoxer
2010-03-01, 11:35:35
Bei bash-Skripten kann man so etwas auch recht einfach mit einer while/case-Konstruktion zusammenbasteln:


#!/bin/bash

function show_help
{
cat << EOF
Options:
-m [arg] Specify mail address
--mail=[arg] Dito
--help Show this message
EOF
}

function parse_args
{
while [ -n "$1" ] ; do
case "$1" in
-m) mail_address=$2 ; shift ;;
--mail=*) mail_address=${1#--mail=} ;;
--help) show_help ; exit 1 ;;
esac

# Proceed to the next argument.
shift
done
}

mail_address=
parse_args "$@"

if [ "$mail_address" = "" ] ; then
echo "Please specify an e-mail address"
exit 1
fi

# ...
exit 0


shift springt dabei jeweils zum nächsten Argument (sprich $2 wird zu $1, $3 zu $2 usw.), daher braucht man es z. B. bei "-m", da hier zwei Parameter ins Spiel kommen. Die Schleife läuft dann, bis alle Argumente durchgegangen wurden, also bis "$1" leer ist.
Vielen Danke, läuft super. (y)
Kommst in meiner Liste der coolen Leute. ;)

*pm hat sich erübrigt.

Gnafoo
2010-03-01, 13:27:16
Kein Problem. Ich habe das auch erst vor kurzem gebraucht, daher musste ich nur im passenden Skript nachsehen ;).

Im Übrigen habe ich den "*)"-Case übersehen, um unbekannte Parameter abzufangen und ggf. abzubrechen. Aber mehr als echo + exit passiert dabei ja auch nicht.