Mat
Aktives Mitglied
Ich versuche, so 1 mal die Woche alten Gammelcode aus Uniaufgaben und Projekten zu posten.
Dieses Mal eine Shellscriptaufgabe. Ziel war es, den Aufbau von Shellscripts kennenzulernen und mit Parametern zu arbeiten.
Aufgabe war:
Jetzt wo ich das wieder sehe, sieht das ok aus, auch wenn die Funktion nicht sehr nützlich ist. Ohne die Anforderungen hätte das auch ein 1Zeiler werden können.
.
Dieses Mal eine Shellscriptaufgabe. Ziel war es, den Aufbau von Shellscripts kennenzulernen und mit Parametern zu arbeiten.
Aufgabe war:
- Suffixe an alle Dateien des aktuellen Verzeichnisses anhängen
- In Anlehnung an Systemskripte Parameter und Hilfetext basteln (aber keine Manpage)
- Bash erzwingen
Bash:
#!/usr/bin/env bash
# Append suffixes to filenames
# Show usage info
usage() {
echo "
USAGE: $0 [OPTION] [<string>]
Appends a given suffix to all files in the current directoy.
OPTIONS:
-h | --help : Shows this
-p | --preview : Just preview the changes
-r | --rename : Change the file names
EXAMPLE:
$ ls ./
x y z
$ $0 --rename '.csv'
$ ls .
x.csv y.csv z.csv
"
}
# Show an error if suffix is empty.
check_suffix() {
if [ "${file_suffix:-}" = "" ]; then
echo "--- empty suffix!"
usage
exit 1
fi
}
# Shows a preview of the rename action
preview() {
check_suffix
for file in $(ls .); do
if [[ "./$file" != "$0" ]]; then
echo $file" --> "$file"${file_suffix}"
fi
done
echo
}
# Rename the files
rename() {
check_suffix
preview
counter=0
for file in $(ls .); do
if [[ "./$file" != "$0" ]]; then
mv $file $file"${file_suffix}"
counter=$((counter + 1))
fi
done
echo "$counter files renamed"
echo
}
# --- main ---
# Check args count
if [ $# -gt 2 ]; then
echo
echo "--- Invalid number of arguments!"
usage
exit 1
fi
case $1 in
"")
echo
echo "--- Empty argument!"
usage
exit 1
;;
"-h")
echo
echo "--- Showing usage info"
usage
exit 0
;;
"--help")
echo
echo "--- Showing usage info"
usage
exit 0
;;
"-r")
echo
echo "--- Renaming:"
file_suffix=$2
rename
exit 0
;;
"--rename")
echo
echo "--- Renaming:"
file_suffix=$2
rename
exit 0
;;
"-p")
echo
echo "--- Preview:"
file_suffix=$2
preview
exit 0
;;
"--preview")
echo
echo "--- Preview:"
file_suffix=$2
preview
exit 0
;;
*)
echo
echo "--- Unknown argument: '$1'"
usage
;;
esac
exit 0
Jetzt wo ich das wieder sehe, sieht das ok aus, auch wenn die Funktion nicht sehr nützlich ist. Ohne die Anforderungen hätte das auch ein 1Zeiler werden können.
.
- Der doppelte Code bei preview und rename gefällt mir nicht
- Vielleicht könnte man noch den Switchcase kleiner machen
- Ich glaube, so wie das aussieht, werden auch Ordner umbenannt