2016-08-06 46 views
0

Ich habe folgenden Bash-SkriptBash-Skript - letzter Fall in getopts nicht

#!/bin/bash 

id="" 
alias="" 
password="" 
outputDirectory="" 
extension="" 

function ParseArgs() 
{ 
while getopts "t:a:p:f:r:o:e" arg 
do 
case "$arg" in 
t) 
id=$OPTARG;; 
a) 
alias="$OPTARG";; 
p) 
password="$OPTARG";; 
f) 
folderPath="$OPTARG";; 
r) 
relativeFolderPath="$OPTARG";; 
o) 
outputDirectory="$OPTARG";; 
e) 
extension="$OPTARG";; 
-)  break;; 
esac 
done 
} 

ParseArgs $* 

echo "Getting all input files from $folderPath" 
inputFiles=$folderPath/* 

echo "Output is $outputDirectory" 
echo "Extension is $extension" 
if [[ $extension != "" ]] 
then 
    echo "Get all input files with extension: $extension" 
    inputFiles = $folderPath/*.$extension 
fi 

for file in $inputFiles 
do 
    echo "Processing $file" 
done 

Aus irgendeinem Grunde zu lesen bekommen, das letzte Argument (-e) wird nicht lesen, wenn ich es verwenden. Zum Beispiel bekomme ich die gleiche Ausgabe unten mit oder ohne das letzte Argument (-e xml), ich habe es getestet, indem ich outputDirectory eingeschlossen habe, um sicherzustellen, dass es gelesen wird.

sh mybashscript.sh -t 1 -a user -p pwd -o /Users/documents -f /Users/documents/Folder -r documents/Folder/a.xml -e xml 
Getting all input files from /Users/dlkc6428587/documents/ResFolder 
Output is /Users/documents 
Extension is 
Processing /Users/documents/Folder/a.xml 
Processing /Users/documents/Folder/b.xml 

Es ist wirklich seltsam, weiß jemand, was ich falsch mache? Vielen Dank.

+0

lernen 'Set verwenden -x' so können Sie sehen, welche Werte für Variablen verwendet werden. Viel Glück. – shellter

Antwort

1

Sie haben nicht darauf hingewiesen, dass -e ein Argument nimmt, indem sie es mit einem Doppelpunkt in dem Aufruf von getopts folgende:

while getopts "t:a:p:f:r:o:e:" arg 

Außerdem sollten Sie die Funktion aufrufen, wie diese

ParseArgs "[email protected]" 

um sicherzustellen, dass alle Argumente, die Leerzeichen enthalten, ordnungsgemäß behandelt werden.


Und schließlich sollte inputFiles ein Array sein:

inputFiles=("$folderPath"/*."$extension") 

for file in "${inputFiles[@]}" 
do 
    echo "Processing $file" 
done 
+0

Danke, das Extra: hat geklappt. Über das Array, ich bekomme Ausgabe wo $ Datei ist nur die Zeichenfolge .../Ordner/*. XML anstelle der tatsächlichen XML-Dateinamen. –