2016-05-06 10 views
1

ich einen einfachen Bash-Skript, und am Ende hat das geschrieben habe ich versucht, wie 0, ...

$ 1 $ Positionsargumente zu testen
echo please enter your name 
read name 
if [ -z "$name" ] 
then 
     echo please enter your name 
fi 
if [ -n "$name" ] 
then 
     echo Thank you so much 
fi 
echo $0 
echo $1 
echo $2 
echo $3 

Nachdem ich laufe, dass war die Ausgabe:

please enter your name 
j 
Thank you so much 
/bin/reza.sh 

Warum nur $ 0 ausgegeben hatte und andere nichts?

+3

definitiv haben Sie '$ 1' nicht übergeben, wenn Sie das Skript ausführen ... – Jahid

+3

$ 1 ist Ihr erstes Befehlszeilenargument, das Sie nie bestanden haben. – monk

Antwort

0

Die Argumente, die Sie in ein Skript eingeben, sind in der Reihenfolge $ 1, $ 2, $ 3 und so weiter.

In diesem testscript:

#!/bin/bash 
echo $0 #Gives you the command/script name itself 
echo $1 #Gives you the first argument 
echo $2 #Gives you the second argument 
echo $3 #Gives you the third argument 
echo [email protected] #Gives you all arguments 
echo $# #Gives you the total number of arguments excluding the script name 

So das Ergebnis

$./testscript a b c 

ist

./testscript 
a 
b 
c 
a b c 
3 

Wenn das Argument nicht zugeordnet ist, wird sein Wert null oder wird nichts gedruckt werden.

$ printf "%sThere is nothing before this.\n" $1 

gibt Ihnen:

There is nothing before this. 

Hinweis: nicht echo Verwenden Sie Argumente zu prüfen, Echo wird eine neue Zeile am Ende automatisch in bash anhängen.

+0

Das war eine großartige Antwort. Ich danke dir sehr. –

+0

@mimrighogimi: Gern geschehen, Kumpel – sjsam

3

Run es wie unten

./bin/reza.sh first second third 
please enter your name 
monk 
Thank you so much 
/bin/reza.sh 
first 
second 
third 

Auch $ 0 ist Dateiname des Skripts selbst.

+0

Ich war sehr verwirrt, dass Positionsargumente funktioniert. Danke für deine Hilfe. –

+0

froh, dass es dir geholfen hat. – monk