Írtam egy bash szkriptet mely kapcsolókkal működik. Ha rossz kapcsolót adok meg kiírja hogy nem jó, és a súgó lehetőséget. Hogy tudom megoldani azt, ha kapcsoló nélkül indítom, akkor is kiírja a súgót?
while [ "$#" -gt "0" ]; do case "${1}" in --a) blabla; shift;; --b) blabla; shift;; --c) blabla; shift;; --h|--help) printf "itt a súgó" *) printf "Ismeretlen kapcsoló ${1}\nSúgó: command --h(elp)\n" exit ;; esac done
- 382 megtekintés
Hozzászólások
Gondolom, a $# értékét kellene vizsgálni, ha az nulla, akkor tolod a súgót és kilépsz.
- A hozzászóláshoz be kell jelentkezni
Egy lehetséges implementáció, bár nem szép:
#!/bin/bash
a() {
echo 'a'
}
b() {
echo 'b'
}
c() {
echo 'c'
}
params=0
while [ $# -gt 0 ]; do
par="$1"
case "$par" in
-a)
a
;;
-b)
b
;;
-c)
c
;;
*)
params='invalid'
break
;;
esac
((params++))
shift
done
case "$params" in
0)
echo "Missing parameters" >&2
exit 1
;;
invalid)
echo "Invalid parameter: '$par'" >&2
exit 1
;;
esac
exit 0
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
help()
{
printf "itt a súgó"
}
if [ "$#" -eq "0" ]; then
help
exit
fi
while [ "$#" -gt "0" ]; then
case "${1}" in
--a) blabla; shift;;
--b) blabla; shift;;
--c) blabla; shift;;
--h|--help)
help
*) printf "Ismeretlen kapcsoló ${1}\nSúgó: command --h(elp)\n"
exit ;;
esac
done
- A hozzászóláshoz be kell jelentkezni
Köszi. Ez így jó. Talán értem is. Ha visszajönne a prompt, mert nincs hibaüzenet, akkor jön a súgó szubrutin. Átverés... :)
- A hozzászóláshoz be kell jelentkezni
Lenne még itt néhány dolog... ;)
Általában két féle dolgot szokás kiírni:
help - A program használatára vonatkozó részletes útmutató, amelyet a -h stb. paraméterre kell kiírni.
usage - Rövid útmutató a program helyes használatára.
Bár a kettő gyakran ugyanaz.
Ezeket az üzeneteket az esetek túlnyomó többségében a stderr kimenetre kell írni! Ez a konvenció akkor is igaz lehet, ha a program nem ír a stdout-ra.
Aztám mi történik, ha a paraméterek a-b-c-h-a-b-c-h sorrendben vannak? ;)
- A hozzászóláshoz be kell jelentkezni
Nezd meg a getopts parancsot.
Elsore kulimasz, es bonyolultnak tunik, de ket example es 15 perc utan jon az Aha! elmeny, es utana mar egyszeruve valik mint a faek.
Nagy elonye, hogy bonyolult kapcsolo es parameterhalmazt is szepen lehet vele lekezelni, es meg a negyedik atalakitas utan is tiszta marad a kod.
En nagyon szeretem.
- A hozzászóláshoz be kell jelentkezni
Felénk a szőlőt szokták kacsolni, nem holmi szkriptet.
"Normális ember már nem kommentel sehol." (c) Poli
- A hozzászóláshoz be kell jelentkezni
Azóta talán szüret is lehetett...
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni