bash
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| bash [2024-04-27 12:33:42] – [mit implizitem Index] manfred | bash [2025-08-31 22:08:18] (aktuell) – [Zahlen von eine Basis in eine andere Basis umrechnen] manfred | ||
|---|---|---|---|
| Zeile 100: | Zeile 100: | ||
| ffmpeg -i 00001.text 00001.txt | ffmpeg -i 00001.text 00001.txt | ||
| - | |||
| - | ===== Arrays ===== | ||
| - | |||
| - | > export ARRAY=(127 0 255) | ||
| - | > echo ${ARRAY[@]} | ||
| - | 127 0 255 | ||
| - | > echo ${# | ||
| - | 3 | ||
| - | > echo ${# | ||
| - | 127 | ||
| - | > echo ${# | ||
| - | 0 | ||
| - | > echo ${# | ||
| - | 255 | ||
| Zeile 252: | Zeile 238: | ||
| ===== Zählschleifen ===== | ===== Zählschleifen ===== | ||
| + | |||
| ==== BASH ==== | ==== BASH ==== | ||
| Zeile 351: | 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 739: | 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 747: | 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 773: | 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, | ||
| Zeile 796: | Zeile 835: | ||
| - | ===== leeren | + | ==== 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 | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== leere Unterverzeichnisse löschen ===== | ||
| '' | '' | ||
| Zeile 1034: | Zeile 1116: | ||
| ==== mit implizitem Index ==== | ==== mit implizitem Index ==== | ||
| + | |||
| + | > export ARRAY=(127 0 255) | ||
| + | > echo ${ARRAY[@]} | ||
| + | 127 0 255 | ||
| + | > echo ${# | ||
| + | 3 | ||
| + | > echo ${# | ||
| + | 127 | ||
| + | > echo ${# | ||
| + | 0 | ||
| + | > echo ${# | ||
| + | 255 | ||
| + | |||
| + | > arrayLaenge=${# | ||
| + | > echo "Das Array enthält ' | ||
| + | Das Array enthält ' | ||
| > testarray=($(find Videos/ -type f)) | > testarray=($(find Videos/ -type f)) | ||
| Zeile 1041: | Zeile 1139: | ||
| **ACHTUNG!** | **ACHTUNG!** | ||
| - | __Es funktioniert mit '' | + | __Es funktioniert mit **'' |
/home/http/wiki/data/attic/bash.1714221222.txt · Zuletzt geändert: von manfred
