bash
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| bash [2024-04-27 16:42:22] – [leeren Unterverzeichnisse löschen] manfred | bash [2025-08-31 22:08:18] (aktuell) – [Zahlen von eine Basis in eine andere Basis umrechnen] manfred | ||
|---|---|---|---|
| Zeile 238: | Zeile 238: | ||
| ===== Zählschleifen ===== | ===== Zählschleifen ===== | ||
| - | |||
| - | [[https:// | ||
| Zeile 340: | Zeile 338: | ||
| > echo " | > echo " | ||
| 3.00000000000000000002 | 3.00000000000000000002 | ||
| + | |||
| + | > echo "a=1; b=2; c=3; print \" | ||
| + | a=1; b=2; c=3; print " | ||
| + | | ||
| + | > echo "a=1; b=2; c=3; print \" | ||
| + | a=1 b=2 c=3 | ||
| + | Summe:6 | ||
| + | |||
| + | |||
| + | === Zahlen von eine Basis in eine andere Basis umrechnen === | ||
| + | |||
| + | ibase = In welcher Basis verstehe ich deine Eingaben? | ||
| + | obase = In welcher Basis soll ich die Ergebnisse ausgeben? | ||
| + | |||
| + | > echo " | ||
| + | 11111111 | ||
| + | |||
| + | > echo " | ||
| + | 11111111 | ||
| + | |||
| + | > vim calc.bc | ||
| + | ibase=10; | ||
| + | obase=2; | ||
| + | | ||
| + | > echo " | ||
| + | 11111111 | ||
| + | |||
| + | <code c Zahlenbasis.bc> | ||
| + | obase = read(); | ||
| + | n = read(); | ||
| + | print n; | ||
| + | print " | ||
| + | </ | ||
| + | |||
| + | <code bash> | ||
| + | > for BASIS in 2 3 5 7 8 12 16; do echo " | ||
| + | 1111011 | ||
| + | 11120 | ||
| + | 443 | ||
| + | 234 | ||
| + | 173 | ||
| + | A3 | ||
| + | 7B | ||
| + | </ | ||
| Zeile 728: | Zeile 770: | ||
| ===== while ohne sub-shell ===== | ===== while ohne sub-shell ===== | ||
| + | |||
| + | [[https:// | ||
| Auf die Variablen, die in einer gewöhnlichen '' | Auf die Variablen, die in einer gewöhnlichen '' | ||
| Zeile 736: | Zeile 780: | ||
| Deshalb ist die Ausgabe dieses Skripts auch leer: | Deshalb ist die Ausgabe dieses Skripts auch leer: | ||
| - | | + | <code bash> |
| - | + | # | |
| - | VAR="" | + | |
| - | echo " | + | VAR="" |
| - | do | + | echo " |
| - | VAR=" | + | do |
| - | done | + | VAR=" |
| - | + | done | |
| - | echo " | + | |
| + | echo " | ||
| + | </ | ||
| Dieses Skript liefert dagegen eine Ausgabe: | Dieses Skript liefert dagegen eine Ausgabe: | ||
| - | | + | <code bash> |
| - | + | # | |
| - | VAR="" | + | |
| - | while read ZEILE | + | VAR="" |
| - | do | + | while read ZEILE |
| - | VAR=" | + | do |
| - | done < <(echo " | + | VAR=" |
| - | + | done < <(echo " | |
| - | echo " | + | |
| + | echo " | ||
| + | </ | ||
| Keine Pipe, | Keine Pipe, | ||
| Zeile 762: | Zeile 810: | ||
| Allserdings funktioniert das auch nicht in vollem Umfang: | Allserdings funktioniert das auch nicht in vollem Umfang: | ||
| - | | + | <code bash> |
| - | + | # | |
| - | VAR1="" | + | |
| - | VAR2="" | + | VAR1="" |
| - | VAR3="" | + | VAR2="" |
| - | while read SPALTE1 SPALTE2 SPALTE3 | + | VAR3="" |
| - | do | + | while read SPALTE1 SPALTE2 SPALTE3 |
| - | VAR1=" | + | do |
| - | VAR2=" | + | VAR1=" |
| - | VAR3=" | + | VAR2=" |
| - | done < <(echo " | + | VAR3=" |
| - | + | done < <(echo " | |
| - | echo " | + | |
| - | VAR1=' | + | echo " |
| - | VAR2=' | + | VAR1=' |
| - | VAR3=' | + | VAR2=' |
| - | " | + | VAR3=' |
| + | " | ||
| + | </ | ||
| Wenn die Zeile gleichzeitig noch in Spalten aufgetrennt werden soll, | Wenn die Zeile gleichzeitig noch in Spalten aufgetrennt werden soll, | ||
| was ja eigentlich geht, | was ja eigentlich geht, | ||
| dann versagt diese Methode... :-( | dann versagt diese Methode... :-( | ||
| + | |||
| + | |||
| + | ==== Probleme mit der while-Schleife ==== | ||
| + | |||
| + | führt man in einer WHILE-Schleife komplexe Kommandos aus, dann wird oft nur das erste Kommando ausgeführt oder jedes 2. Kommando nicht ausgeführt: | ||
| + | <code bash> | ||
| + | # | ||
| + | |||
| + | # bei jeder 2. Zeile (Kommando) fehlen an Zeilenanfang, | ||
| + | |||
| + | find . -type f -iname "Air Strike_*.mkv" | ||
| + | do | ||
| + | ffmpeg -i " | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | Als Lösung kann man entweder den Umweg über eine Zwischendatei gehen, die dann als statisches Skript ausgeführt wird: | ||
| + | <code bash> | ||
| + | # | ||
| + | |||
| + | # funktioniert, | ||
| + | |||
| + | find . -type f -iname "Air Strike_*.mkv" | ||
| + | do | ||
| + | Iecho " | ||
| + | done > / | ||
| + | bash / | ||
| + | rm -f / | ||
| + | </ | ||
| + | |||
| + | Oder man wählt die FOR-Schleife, | ||
| + | <code bash> | ||
| + | # | ||
| + | |||
| + | # funktioniert, | ||
| + | |||
| + | IFS=$' | ||
| + | DATEIEN=($(find . -type f -iname "Air Strike_*.mkv" | ||
| + | for FILE in " | ||
| + | do | ||
| + | ffmpeg -i " | ||
| + | done | ||
| + | </ | ||
| Zeile 1035: | Zeile 1128: | ||
| > echo ${# | > echo ${# | ||
| 255 | 255 | ||
| + | |||
| + | > arrayLaenge=${# | ||
| + | > echo "Das Array enthält ' | ||
| + | Das Array enthält ' | ||
| > testarray=($(find Videos/ -type f)) | > testarray=($(find Videos/ -type f)) | ||
/home/http/wiki/data/attic/bash.1714236142.txt · Zuletzt geändert: von manfred
