
Ich erweitere die folgende Funktion um die Option -i | --ignore-case
mit Fehlerbehandlung
#!/bin/sh
[ $# -ne 1 ] && echo "1 argument is needed" && exit 1
find $HOME -type f -name "*.tex" -exec grep -il "$1" {} + | vim -
Erweiterter Code
#!/bin/sh
################################
# Check if parameters options #
# are given on the commandline #
################################
while (( "$#" )); do
case "$1" in
-h | --help)
echo "help menu"
exit 0
;;
-i | --ignore-case)
[ $# -ne 2 ] && echo "1 argumenst i needed" && exit 1
find $HOME -type f -name "*.tex" -exec grep -il "$1" {} + | vim -
exit 0
;;
-*)
echo "Error: Unknown option: $1" >&2
exit 1
;;
*) # No more options
break
;;
esac
shift # not sure if needed
done
# Do this if no cases chosen
[ $# -ne 1 ] && echo "1 argument is needed" && exit 1
find $HOME -type f -name "*.tex" -exec grep -l "$1" {} + | vim -
Ergebnis
haetex "TODO"
. Die erwartete Ausgabe ist die gleiche wie die Ausgabe. Bestanden!haetex -i "TODO"
. Erwartetes Ergebnis: Suche ohne Berücksichtigung der Groß- und Kleinschreibung. Ergebnis: leere Datei.
-i
Warum funktioniert die Option hier nicht?
Antwort1
grep
Ändern Sie in der Groß-/Kleinschreibung das in die -i
Suche nach $2
, da $1
dieses die gerade getestete Option enthält und nicht den Suchbegriff.
find $HOME -type f -name "*.tex" -exec grep -il "$2" {} + | vim -
Um mehrere Optionen zu verarbeiten, wäre es besser, wenn die case
Anweisung einfach eine Variable setzt, z. B.
-i | --ignore-case)
[ $# -ne 2 ] && echo "1 argumenst i needed" && exit 1
case_option=-i
;;
Dann find
würde der Befehl nach der Schleife so aussehen:
find $HOME -type f -name "*.tex" -exec grep -l $case_option "$1" {} + | vim -
In diesem Fall kann es verwendet werden $1
, da der shift
Suchbegriff an den Anfang der Argumente verschoben wurde.
Das gesamte Skript sieht also folgendermaßen aus:
while (( "$#" )); do
case "$1" in
-h | --help)
echo "help menu"
exit 0
;;
-i | --ignore-case)
[ $# -ne 2 ] && echo "1 argumenst i needed" && exit 1
case_option=-i
;;
-*)
echo "Error: Unknown option: $1" >&2
exit 1
;;
*) # No more options
break
;;
esac
shift # not sure if needed
done
find $HOME -type f -name "*.tex" -exec grep -l $case_option "$1" {} + | vim -