Ou pour ce qui semble exagéré, mais qui est en fait simpliste ... Couvre à peu près tous vos cas, et pas de chaîne vide ou de préoccupations unaires.
Dans le cas où le premier argument est '-v', alors faites votre conditionnel ps -ef
, sinon dans tous les autres cas lancez l'utilisation.
#!/bin/sh
case $1 in
'-v') if [ "$1" = -v ]; then
echo "`ps -ef | grep -v '\['`"
else
echo "`ps -ef | grep '\[' | grep root`"
fi;;
*) echo "usage: $0 [-v]"
exit 1;; #It is good practice to throw a code, hence allowing $? check
esac
Si l'on ne se soucie pas de savoir où se trouve l'argument «-v», alors déposez simplement le cas dans une boucle. Cela permettrait de parcourir tous les arguments et de trouver «-v» n'importe où (à condition qu'il existe). Cela signifie que l'ordre des arguments de la ligne de commande n'est pas important. Soyez prévenu, comme présenté, la variable arg_match est définie, il ne s'agit donc que d'un indicateur. Il autorise plusieurs occurrences de l'argument «-v». On pourrait ignorer toutes les autres occurrences de «-v» assez facilement.
#!/bin/sh
usage ()
{
echo "usage: $0 [-v]"
exit 1
}
unset arg_match
for arg in $*
do
case $arg in
'-v') if [ "$arg" = -v ]; then
echo "`ps -ef | grep -v '\['`"
else
echo "`ps -ef | grep '\[' | grep root`"
fi
arg_match=1;; # this is set, but could increment.
*) ;;
esac
done
if [ ! $arg_match ]
then
usage
fi
Mais autoriser plusieurs occurrences d'un argument est pratique à utiliser dans des situations telles que:
$ adduser -u:sam -s -f -u:bob -trace -verbose
Nous ne nous soucions pas de l'ordre des arguments et autorisons même plusieurs arguments -u. Oui, il est simple d'autoriser également:
$ adduser -u sam -s -f -u bob -trace -verbose
echo "usage: $0 [-v]"
;$-
affiche les indicateurs d'option de shell actifs, pas le nom du script actuel.