2017-04-14 3 views
-2

Ich bin wieder zurück :( Noch ein Problem mit Bash, ist die Frage über das Skript eine Option zu lesen -r dann tun einige weitere Operation. Ich denke, ich mache es richtig, aber wenn ich versucht, es auszuführen, bekam ich ein Feedback sagen: "./stripchars: Zeile 20: -r: Keine solche Datei oder Verzeichnis". Und ein anderes Sprichwort: "./stripchars: Zeile 26: ne: Befehl nicht gefunden" Hier mein Code:Über getopts Funktion

#!/bin/bash 
FILE=$1 
while getopts "r:" o; do 
case "${o}" in 
    r) 
     r=${OPTARG} 
     ;; 
    *) 
     ;; 
esac 
done 
shift $((OPTIND-1)) 
if [ ! -z "$FILE" ] 
then 
exec 0< "$FILE" 
fi 
while IFS='' read -r LINE 
do 
echo "$LINE" | tr -d '${r}' 
done 
if [ -z "${r}" ] 
then 
if [ ! -z "$FILE" ] 
then 
    exec 0< "$FILE" 
fi 
while IFS='' read -r LINE 
    do 
    echo "$LINE" | tr -d '[:punct:]' 
    done 
fi 

Antwort

1

Wenn der Dateiname wirklich das erste Argument (wie durch FILE=$1 impliziert), dann hat getopts einen von Null verschiedenen Exit-Status sofort (seit den ersten argumen t ist keine Option), und Sie kommen nie in die Schleife. Sie müssen Ihren Anruf so etwas wie

myscript -r whatever foo.txt 

ändern und FILE=$1nach die Schleife bewegen, die die Optionen analysiert.

Verwandte Themen