2016-07-22 6 views
0

Ich schreibe ein Shell-Skript (mit dem Namen "test-script.sh"). Eine Funktion ist wie folgt:Schreiben eines Shell-Skripts - das den Fehler drucken kann und weiterhin die Eingabe beibehalten konnte, die Sie gerade in der Befehlszeile ausführen

Wenn ich den Skriptnamen in CLI eingib und auf <ENTER> klicke, wird der Skriptname in CLI beibehalten, wenn der Cursor auf einen Fehler trifft.

wie:

me @ ubuntu: $ test-script.sh <ENTER>

me @ ubuntu: $ Sorry, Sie müssen Eingang mindestens einen Parameter.

me @ ubuntu: $ test-script.sh [cursor]< < < < Hier wird der Skriptnamen automatisch ausgegeben und nach mit dem Cursor.

Nehmen wir echo ${!!d} als ein Beispiel. Wenn Sie echo ${!!d} in CLI ausführen, wird ein Fehler gedruckt, aber der Cmd echo ${!!d} wird in CLI beibehalten. Hier ist echo mein test-script.sh.

Wie erreiche ich diese Funktion in meinem Skript? Danke ~

Antwort

0

echo $0 den Skriptnamen drucken: $0 - ist Skriptname, $1 1. CL-Argument ist, $2 2. CL Argument ist und so weiter ..., $# ist die Anzahl der Argumentation.

Beispiel:

Ausgabe:

$ ./test_script.sh 
Sorry, you must input at least one parameter. 
here are the options: 
1. for option one 
2. for option two 
3. for option three 
./test_script.sh 1 
do you stuff for option 1 here 
$ 

Script:

#!/bin/sh 

menu(){ 
     echo "here are the options:" 
     echo "1. for option one" 
     echo "2. for option two" 
     echo "3. for option three" 
} 

if [ $# -eq 0 ]; 
then 
     echo "Sorry, you must input at least one parameter." 

     menu 
     read -p "$0 " option 
else 
option=$1 
fi 


case $option in 

"1") echo "do you stuff for option 1 here" ;; 
"2") echo "do you stuff for option 2 here" ;; 
"3") echo "do you stuff for option 3 here" ;; 
*) 
    echo 
    echo "Invalid option: ${option}" 
    echo "...exiting...";sleep 1 
exit 
    ;; 
esac 
+0

Großer Dank für Ihre Bemühungen auf meine Frage! – Steven

+0

Wenn dies Ihre Frage beantwortet - akzeptieren Sie dies als Antwort. (mach das richtige Zeichen grün) –

+0

Danke nochmal für deine Hilfe! Aber das ist nicht was ich will. Wenn wir 'read -p' verwenden, können wir den Skriptnamen $ 0 nicht durch Klicken auf die Rücktaste bearbeiten. Was ich will, ist das Skript bereits EXIT, aber der Skriptname wurde auf der CLI gehalten und kann weiter bearbeiten. – Steven