grep ist ein gutes Werkzeug, man kann es aber auch alleine mit Sprachmitteln der bash lösen
Danke, aber ich verstehe da einiges nicht, speziell in Hinblick auf das konkrete Problem.
#! /bin/bash -e
Was bewirkt das "-e"? Man bash hat mich nicht wirklich schlauer gemacht. Läuft das auf interaktiv hinaus?
Wie schon angedeutet, ich glaube mittlerweile es bringt nichts abzufragen, ob es 3 Argumente gibt. Wenn es die nicht gibt, muss erst geprüft werden, was falsch ist. Aber gut zu wissen und ich erinnere mich jetzt wieder, ich hatte mal schon so ein Konstrukt in einem anderen Skript verwendet, vergisst man, wenn man es Jahre nicht benötigt.
Ich erkläre dem User/n persönlich, es sind 3 Argumente anzugeben. Die Quelldateien kommen im Normalfall von einem "Handy-Sync-Script per lftp", der Pfad enthält US-ASCII und keine Leerzeichen, ist aber je nach PC anders. Das könnte man automatisieren, dann wird es aber unflexibel, wenn man je nach Situation einen anderen Pfad hat. Das führt jetzt zu weit weg. Nach dem Sync muss am Handy gelöscht werden, damit Dateien nicht doppelt auf den PC gelangen, etc. Da ist eine ganze Menge organisatorisch notwendig,
Problem könnte noch werden, wenn eine andere Aufnahme-App am Handy verwendet wird, die eine andere Dateibenennung als default hat. Das lasse ich auf mich zukommen, zu 99,99% wird Fieldrecorder am Android-Handy verwendet. Es könnte auch noch Neutron oder ASR verwendet werden, das müsste man dann nach dem Default-Dateimuster erkennen. Diese Möglichkeit ignoriere ich erst mal.
Wenn man sich als Albumname "Probe - November" wünscht, dann muss man Anführungszeichen verwenden, Fertig mit Erklärungen an den User. Die wichtigsten Fehler werden versucht abzufangen, alles ist mir zu aufwendig. Es wäre sehr unwahrscheinlich "Probe \ November" zu verwenden und dann die Datei an einen Windows-User weiterzugeben. Keine Ahnung was da Windows macht, wenn da so eine Datei angeboten wird. Um Problemen vorzubeugen, wird einfach das Zeichen verboten.
Ich bin bis jetzt für das 1. Argument so vorgegangen, das kann durchaus besser formuliert werden, aber funktioniert.
if [ -z "$1" ]; then
echo
echo "Quellverzeichnis ist nicht angegeben"
echo "Quellverzeichnis angeben und Skript erneut aufrufen"
echo
exit
fi
if [ -d "$1" ]; then
cd "$1"
else
echo
echo "Quellverzeichnis wurde nicht gefunden"
echo "Bestehendes Quellverzeichnis angeben und Skript erneut aufrufen"
echo
exit
fi
Fehlt das 1. Argument, interessiert mich noch nicht, dass das 2. und 3. Argument auch fehlt. Ich habe den Aufruf erklärt und wenn der vergessen wurde, ruft man solange auf bis 3 Argumente angegeben wurden.
Das was ich bis jetzt für das 2. Argument hatte, passt nicht mehr, nachdem ich die genannten Zeichen nun gar nicht mehr erlaube.
Ich breche also immer mit einem Hinweis ab, wenn eine grundsätzliche Logik nicht passt. Kein 2. Argument, Abbruch mit Hinweisen.
echo "Nach Bereinigung von '/\|:' :" >&2
for x
do ##echo $x >&2
echo ${x//[\/\\\\:\|]/}
doneDas verstehe ich nicht ganz. Ich hatte in dieser Richtung gedacht, aber das passt eben für den Pfad nicht:
if grep -q '[/\|:]' <<<$@;then
echo
echo "Albumname und / oder Artistname enthalten nicht erlaubte Zeichen"
echo "Verboten sind / \ | :"
echo "Bitte korrigieren und Skript neu starten"
echo
exit 2
fi
Vielleicht könnte man es so ähnlich mit anderer Info machen.
if grep -q '[/\|:]' <<<$2;then
Ich finde die Schleife (für mich) nach Jahren schlecht lesbar / verständlich, was da gemacht wurde, grep ist für mich viel verständlicher
test $# = 3 || { echo Erwarte genau 3 Argumente ; exit 3 ;}Ich glaube, das kann man sich sparen. Wenn es passt, läuft das Script, sonst wird es mit Hinweis wie an den Beispielen davor abgebrochen. Aber ok, ich hatte mal danach gefragt.