bash szkript kacsolókkal

Í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

Hozzászólások

Gondolom, a $# értékét kellene vizsgálni, ha az nulla, akkor tolod a súgót és kilépsz.

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


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

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? ;)

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.

Felénk a szőlőt szokták kacsolni, nem holmi szkriptet.

Azt fogta rám, hogy gonosz vagyok. Pedig nem is.