Bash-Skript will nicht so wie ich

tobi.wld

Lt. Junior Grade
Registriert
Dez. 2020
Beiträge
268
Hallo zusammen. Ich arbeite gerade an einem Skript, allerdings will das nicht so wie ich will
Skript:
Bash:
#!/bin/bash

echo "Name der Stadt: "
read city

city=$city | sed 's/ /_/g'
city=#city in klein geschrieben

mkdir $city

Ich möchte also das wenn ich "Frankfurt am Main" eingebe, dass daraus "frankfurt_am_main" gemacht wird und ein Ordner erstellt wird.
Nun habe ich das Problem dass ich 1. noch keine Möglichkeit gefunden habe wie ich den "Frankfurt_am_Main" String zu "frankfurt_am_main" bekomme und 2. wie ich den eine Variable aus der Rückgabe der Pipe bekomme. Da wird die Variable dann immer geleert
 
Du brauchst ne Subshell fürs Erste.
Bash:
city="$(echo "$city" | sed 's/ /_/g')"
Und das Zweite läuft dann analog genauso, nur für ne Lowercase Konvertierung.
 
Alternativ ginge auch diese Herangehensweise. Einmal für die Leerzeichen und einmal für die Ersetzung der Großbuchstaben.
Bash:
city=$(sed 's/ /_/g' <<< $city)
city=$(sed 's/[A-Z]/\L&/g' <<< $city)
 
Du könntest das hier mal probieren (hat auf meinem Synology funktioniert):
Bash:
#!/bin/bash
echo "Name der Stadt: "
read city

city=${city/ /_}
city=${city,,}

mkdir $city
 
  • Gefällt mir
Reaktionen: tobi.wld und PHuV
Mal sollte beachten, daß bei vielen Dateien und Daten Programme wie sed einen extra Fork auslösen und damit die Verarbeitungsgeschwindigkeit bremsen. Daher sollte man, wenn es effizient und schnell sein soll, vieles über Inline Bash Funktionen abfackeln. Sprich, daß wie Korben2206 es verwendet hat, ist genau so, wie man es heute machen sollte.
 
Bash:
#!/bin/bash
echo "Name der Stadt: "
read city

city=${city// /_}
city=${city@L}

mkdir $city

Angepasst von @Korben2206, das hier ersetzt alle _ im String und sorgt für die Kleinschreibung
 
  • Gefällt mir
Reaktionen: tobi.wld
Alles klar, funktioniert jetzt im groben und ganzen.
Wie kann ich machen dass er alle Leerzeichen zu Unterstrichen umwandelt?
Im Moment nimmt er nur den ersten
1655119209591.png

Ergänzung ()

next_mi schrieb:
Angepasst von @Korben2206, das hier ersetzt alle _ im String und sorgt für die Kleinschreibung
Ah perfekt. Genau das was ich gesucht habe. Vielen Dank! :)
Ergänzung ()

Jetzt hätte ich noch eine letzte Frage. Wie kann ich es machen dass er Umlaute zu oe, ue oder ae umschreibt?
 
Jetzt hätte ich noch eine letzte Frage. Wie kann ich es machen dass er Umlaute zu oe, ue oder ae umschreibt?
 
Bash:
#!/bin/bash
echo "Name der Stadt: "
read city

city=${city// /_}
city=${city@L}
city=${city//ä/ae}
city=${city//ü/ue}
city=${city//ö/oe}

mkdir $city

Vielleicht erkennst du das Muster; ${ Variable/ was ersetzt werden soll / womit es ersetzt werden soll}
 
next_mi schrieb:
Vielleicht erkennst du das Muster; ${ Variable/ was ersetzt werden soll / womit es ersetzt werden soll}
Ah jetzt macht das ganze natürlich Sinn. Vielen Dank!! :)
 
Weil es thematisch so halb passt: Hat man bereits Dateien die Sonderzeichen etc. enthalten, kann man die mittels des Tools detox los werden.
Zuerst Sonderzeichen, Umlaute und Leerzeichen entfernen:
$ detox /tmp
Der Dateiname
/tmp/Öl und Müll macht Ärger und keinen Spaß.txt
wird so zu:
/tmp/OEl_und_Muell_macht_AErger_und_keinen_Spass.txt
Jetzt noch alles in Kleinbuchstaben umwandeln:
$ detox -s lower /tmp

Man kann natürlich den Befehl auch rekursiv arbeiten lassen, oder sich selbst Ersetzungstabellen erzeugen.
 
  • Gefällt mir
Reaktionen: PHuV
Zurück
Oben