2016-04-01 4 views
0

Ich habe eine bash script, die einige command line args und eine filename als Inline-Parameter dauert. Ich kann den Inline-Parameter nicht lesen.Wie Inline-Parameter mit Befehlszeilenargumente im Bash-Skript lesen?

sh test.sh -a a -b b -c c < pwd.txt 

test.sh hat

if [ $# = 0 ] 
then 
    echo $USAGE >&2 
    exit $STATUS_ERROR_FAIL 
fi 

# Parse command line options. 
while getopts a:b:c: OPT; 
do 
case "$OPT" in 
a) 
    a="$OPTARG" 
    ;; 
b) 
    b="$OPTARG" 
    ;; 
c) 
    c="$OPTARG" 
    ;; 
\?) 
    # getopts issues an error message 
    echo $USAGE 
    exit $STATUS_ERROR_FAIL 
    ;; 
esac 
done 

shift $((OPTIND-1)) 
echo "1=$1" 
+0

"Ich habe ein Bash-Skript" abhängig ist - Warum läufst du dann mit 'sh'? Das funktioniert so, wie ich es erwarte, was meinst du mit dem "Inline-Parameter"? OPTARG funktioniert gut. Könnten Sie bitte den Fehler, den Sie bekommen, beschreiben und ein Beispiel zeigen? – cdarke

+0

OK, die Frage wurde bearbeitet - bitte überprüfen Sie die Änderung. Wo liefern Sie den Dateinamen in der Befehlszeile? In Ihrer vorherigen Version haben Sie 'test.sh' als Dateinamen angegeben. – cdarke

+0

Ist deine Verwirrung ' cdarke

Antwort

0

Ihr Skript funktioniert gut, Ihr Fehler ist

echo "1=$1" 

, wenn Sie Ihre Parameter sehen möchten, sollten Sie eine echo/print in Ihrem case

hinzufügen
#!/bin/bash 

if [ $# = 0 ] 
then 
    echo $USAGE >&2 
    exit $STATUS_ERROR_FAIL 
fi 


# Parse command line options. 
while getopts a:b:c: OPT; 
do 
case "$OPT" in 
a) 
    a="${OPTARG}" 
     echo "a[$a]" 
    ;; 
b) 
    b="${OPTARG}" 
     echo "b[$b]" 
    ;; 
c) 
    c="${OPTARG}" 
     echo "c[$c]" 
    ;; 
\?) 
    # getopts issues an error message 
    echo $USAGE 
    exit $STATUS_ERROR_FAIL 
    ;; 
esac 
done 

shift $((OPTIND-1)) 

oder können Sie die echo/print am Ende des Skripts hinzuzufügen .. es von Ihren Bedürfnissen

Ausgang

[shell] ➤ ./t -a 1 -b 2 -c 3 
a[1] 
b[2] 
c[3] 

Grüße

Claudio