Abfrage in Script mit Default-Wert - wie geht das?

K

Kryptaesthesie

Jungspund
Hallo :-)

Ich würde gerne in meinem Script Abfragen machen, die mit einem Defaultwert belegt sind.

Also folgender Aufbau:
Code:
#!/bin/sh

ANTW=""
echo "soll etwas gemacht werden? [J/n]"
read ANTW
if [ $ANTW = "j" ]
then
	echo "okay, machen ..."
fi
Ich möchte nun gerne erreichen, dass ich sowohl Enter drücken, als auch j als Großbuchstabe eingeben kann, um ins if zu gelangen.
Gibt es da eine best-practise Variante?

Ich meine, bei Unix-Programmen hat sich so ein Verhalten eingebürgert, kann das sein?

Danke schon mal im Voraus! :)
Gruß
Gerrit
 
Hi,

ehm, einfach nach read checken ob die Variable leer ist, und wenn ja den default Wert nehmen?

mfg,
bytepool
 
einfach nach read checken ob die Variable leer ist, und wenn ja den default Wert nehmen?
Hmm, wenn ich einfach nur Enter drücke, also die Variable dann leer ist, kommt folgender Fehler:
Code:
./mytest.sh: line 7: [: =: unary operator expected


Gruß
Gerrit
 
Hi,

zunächst mal ganz einfach ein Tipp: Variablen immer in Quotes, oder mit Default-Werten; spart nen Haufen solcher Probleme ;-)

Dann könnte man deinen Ansatz einfach ein bisschen erweitern:
Code:
#!/bin/sh

ANTW=""
echo "soll etwas gemacht werden? [J/n]"
read ANTW
if [ ${ANTW:-j} = "j" ]
then
	echo "okay, machen ..."
fi

Wenn so was möglichst überall laufen soll (verschiedene Shells, unterschiedliche Betriebssysteme), mach ich das meistens so in der Art:
Code:
type shopt | grep "not found" >/dev/null || shopt -s xpg_echo

while :; do
        echo "\nWas jetzt? [J/n/q] \c"
        read RESP
        case "$RESP" in
        ""|[Jj])                         # "" - default response
                echo "Yes, Sir!"
                break
                ;;
        [Nn])
                echo "Nope"
                break
                ;;
        [Qq])
                echo "Quit"
                exit
                ;;
        *)
                echo "Bloedsinn ... Nochmal versuchen!"
                ;;
        esac
done
...

Und sonst gibts natürlich auf den diversen Systemen so praktische Utilities wie "dialog" oder "ckyorn", jeweils mit den dazugehörigen Manuals ...

Gruss,
A.
 
Das klappt in der Tat besser, als = "" :)

Dankööö! :)
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

zunächst mal ganz einfach ein Tipp: Variablen immer in Quotes, oder mit Default-Werten; spart nen Haufen solcher Probleme ;-)

Dann könnte man deinen Ansatz einfach ein bisschen erweitern:
Code:
#!/bin/sh

ANTW=""
echo "soll etwas gemacht werden? [J/n]"
read ANTW
if [ ${ANTW:-j} = "j" ]
then
	echo "okay, machen ..."
fi

Wenn so was möglichst überall laufen soll (verschiedene Shells, unterschiedliche Betriebssysteme), mach ich das meistens so in der Art:
Code:
type shopt | grep "not found" >/dev/null || shopt -s xpg_echo

while :; do
        echo "\nWas jetzt? [J/n/q] \c"
        read RESP
        case "$RESP" in
        ""|[Jj])                         # "" - default response
                echo "Yes, Sir!"
                break
                ;;
        [Nn])
                echo "Nope"
                break
                ;;
        [Qq])
                echo "Quit"
                exit
                ;;
        *)
                echo "Bloedsinn ... Nochmal versuchen!"
                ;;
        esac
done
...

Und sonst gibts natürlich auf den diversen Systemen so praktische Utilities wie "dialog" oder "ckyorn", jeweils mit den dazugehörigen Manuals ...

Hey cool, danke für den Ansatz! :)
 
Zuletzt bearbeitet:

Ähnliche Themen

Script zu bearbeiten einer conf Datei

Koplizierte Sache.. AWK oder SED ??

Script FreeIP

Mein erstes größeres Skript.

ja/nein abfrage (schleife ?)

Zurück
Oben