Ya da aşırı aşırılık gibi görünen ama aslında basit olan şey için ... Hemen hemen tüm davalarınızı kapsar ve boş dizeler veya tekli endişeler yoktur.
İlk argümanın '-v' olması durumunda, koşulunuzu yapın ps -ef, aksi takdirde diğer tüm durumlarda kullanımı atın.
#!/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;;
esac
Kişi '-v' argümanının nerede olduğu umurunda değilse, durumu bir döngünün içine bırakın. Tüm bağımsız değişkenleri yürümeye ve herhangi bir yerde '-v' bulmaya izin verir (eğer varsa). Bu, komut satırı bağımsız değişken sırasının önemli olmadığı anlamına gelir. Önceden uyarılalım, sunulduğu gibi, arg_match değişkeni ayarlanmıştır, bu nedenle sadece bir işarettir. Birden çok '-v' argümanına izin verir. Diğer tüm '-v' oluşumlarını yeterince kolay görmezden gelebiliriz.
#!/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;;
*) ;;
esac
done
if [ ! $arg_match ]
then
usage
fi
Ancak, aşağıdaki gibi durumlarda kullanmak için uygun olan bir argümanın birden fazla oluşumuna izin verin:
$ adduser -u:sam -s -f -u:bob -trace -verbose
Argümanların sırasını önemsemiyoruz ve hatta çoklu -u argümanlarına izin veriyoruz. Evet, aşağıdakilere de izin vermek basit bir konudur:
$ adduser -u sam -s -f -u bob -trace -verbose
echo "usage: $0 [-v]";$-geçerli komut dosyasının adını değil, etkin kabuk seçeneği bayraklarını gösterir.