Ich lernte Bash sehr kürzlich, und ich versuche Argumente für mein Skript zu lesen. Also schrieb ich das, aber ich erhalte eine Fehlermeldung (und vim hat in rosa letzten Doppel Klammer in der 4. Zeile highlited)Fehler im Code zum Parsen von Argumenten
#!/bin/bash
for ((i=1; i<=$#; i++)); do
if [[ ${!i:0:1} == "-" ]] && ! [[ ${!i:1} =~ [^a-zA-Z]+ ]]; then
for ((j=1; j<=$(($(expr length ${!i})-1)); j++)); do
if [[ ${!i:j:1} == "s" ]]; then
k=$((i+1))
if [ -e ${!k} ]; then
echo $(realpath ${!k})
fi
elif [[ ${!i:j:1} == "o" ]]; then
echo "Running script without output!"
fi
done
fi
done
ich folgende Fehlermeldung erhalten, wenn i ./test -so doc1
./tests2: line 13: syntax error near unexpected token `newline'
./tests2: line 13: ` done'
laufen kann Wer hilft mir zu verstehen, was mit meinem Skript nicht stimmt?
Normalerweise, wenn Sie Indizes verwenden, tun Sie etwas falsch. Was versuchst du eigentlich zu erreichen? Es gibt wahrscheinlich eine viel einfachere, viel mehr idiomatische Lösung. – chepner
Ich weiß nicht, was ein Indice ist: S. Aber ich habe nur versucht, nach allen gegebenen Parametern zu suchen, und dann prüfen, ob ein Parameter mehrere Buchstaben enthält, wie "rm -rf ..." –
Lesen Sie auch über den 'getopts'-Befehl in der 'bash'-Manpage . – chepner