Benutzer-Werkzeuge

Webseiten-Werkzeuge


bash

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
bash [2024-04-27 16:50:33] – [while ohne sub-shell] manfredbash [2025-08-31 22:08:18] (aktuell) – [Zahlen von eine Basis in eine andere Basis umrechnen] manfred
Zeile 338: Zeile 338:
   > echo "l(8)/l(2)" | bc -l   > echo "l(8)/l(2)" | bc -l
   3.00000000000000000002   3.00000000000000000002
 +
 +  > echo "a=1; b=2; c=3; print \"a=\", a, \" b=\", b, \" c=\", c; print \"\nSumme:\", a + b + c;print \"\n\""
 +  a=1; b=2; c=3; print "a=", a, " b=", b, " c=", c; print "\nSumme:", a + b + c;print "\n"
 +  
 +  > echo "a=1; b=2; c=3; print \"a=\", a, \" b=\", b, \" c=\", c; print \"\nSumme:\", a + b + c;print \"\n\"" | bc -lq
 +  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 "ibase=10; obase=2; 255" | bc
 +  11111111
 +
 +  > echo "255" | sed "s/.*/ibase=10; obase=2; &/" | bc
 +  11111111
 +
 +  > vim calc.bc
 +  ibase=10;
 +  obase=2;
 +  
 +  > echo "255" | bc calc.bc
 +  11111111
 +
 +<code c Zahlenbasis.bc>
 +obase = read();
 +n = read();
 +print n;
 +print "\n"
 +</code>
 +
 +<code bash>
 +> for BASIS in 2 3 5 7 8 12 16; do echo "${BASIS} 123" | tr ' ' '\n' | bc -q ./Zahlenbasis.bc; done
 +1111011
 +11120
 +443
 +234
 +173
 +A3
 +7B
 +</code>
  
  
Zeile 736: Zeile 780:
  
 Deshalb ist die Ausgabe dieses Skripts auch leer: Deshalb ist die Ausgabe dieses Skripts auch leer:
-  #!/usr/bin/env bash +<code bash> 
-   +#!/usr/bin/env bash 
-  VAR="" + 
-  echo "Test" | while read ZEILE +VAR="" 
-  do +echo "Test" | while read ZEILE 
-          VAR="${ZEILE}" +do 
-  done +        VAR="${ZEILE}" 
-   +done 
-  echo "VAR='${VAR}'"+ 
 +echo "VAR='${VAR}'" 
 +</code>
  
 Dieses Skript liefert dagegen eine Ausgabe: Dieses Skript liefert dagegen eine Ausgabe:
-  #!/usr/bin/env bash +<code bash> 
-   +#!/usr/bin/env bash 
-  VAR="" + 
-  while read ZEILE +VAR="" 
-  do +while read ZEILE 
-          VAR="${ZEILE}" +do 
-  done < <(echo "Test"+        VAR="${ZEILE}" 
-   +done < <(echo "Test"
-  echo "VAR='${VAR}'"+ 
 +echo "VAR='${VAR}'" 
 +</code>
  
 Keine Pipe, Keine Pipe,
Zeile 762: Zeile 810:
  
 Allserdings funktioniert das auch nicht in vollem Umfang: Allserdings funktioniert das auch nicht in vollem Umfang:
-  #!/usr/bin/env bash +<code bash> 
-   +#!/usr/bin/env bash 
-  VAR1="" + 
-  VAR2="" +VAR1="" 
-  VAR3="" +VAR2="" 
-  while read SPALTE1 SPALTE2 SPALTE3 +VAR3="" 
-  do +while read SPALTE1 SPALTE2 SPALTE3 
-          VAR1="${SPALTE1}" +do 
-          VAR2="${SPALTE2}" +        VAR1="${SPALTE1}" 
-          VAR3="${SPALTE3}" +        VAR2="${SPALTE2}" 
-  done < <(echo "Test"+        VAR3="${SPALTE3}" 
-   +done < <(echo "Test"
-  echo " + 
-  VAR1='${VAR1}' +echo " 
-  VAR2='${VAR2}' +VAR1='${VAR1}' 
-  VAR3='${VAR3}' +VAR2='${VAR2}' 
-  "+VAR3='${VAR3}' 
 +" 
 +</code>
  
 Wenn die Zeile gleichzeitig noch in Spalten aufgetrennt werden soll, Wenn die Zeile gleichzeitig noch in Spalten aufgetrennt werden soll,
Zeile 789: Zeile 839:
 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: 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> <code bash>
 +#!/usr/bin/env bash
 +
 # bei jeder 2. Zeile (Kommando) fehlen an Zeilenanfang, mehrere Zeichen, deshalb bricht es ab # bei jeder 2. Zeile (Kommando) fehlen an Zeilenanfang, mehrere Zeichen, deshalb bricht es ab
 +
 find . -type f -iname "Air Strike_*.mkv" | sed 's|^[.]/||' | sort | while read FILE find . -type f -iname "Air Strike_*.mkv" | sed 's|^[.]/||' | sort | while read FILE
 do do
Zeile 798: Zeile 851:
 Als Lösung kann man entweder den Umweg über eine Zwischendatei gehen, die dann als statisches Skript ausgeführt wird: Als Lösung kann man entweder den Umweg über eine Zwischendatei gehen, die dann als statisches Skript ausgeführt wird:
 <code bash> <code bash>
-bei jeder 2. Zeile (Kommando) fehlen an Zeilenanfangmehrere Zeichen, deshalb bricht es ab+#!/usr/bin/env bash 
 + 
 +# funktioniertwie erwartet 
 find . -type f -iname "Air Strike_*.mkv" | sed 's|^[.]/||' | sort | while read FILE find . -type f -iname "Air Strike_*.mkv" | sed 's|^[.]/||' | sort | while read FILE
 do do
Zeile 807: Zeile 863:
 </code> </code>
  
-Oder man wählt die FOR-Schleife, muß dann aber den ''IFS'' verbiegen:+Oder man wählt die FOR-Schleife, dann muß man aber den ''IFS'' verbiegen, um Dateien mit Leerzeichen verarbeiten zu können:
 <code bash> <code bash>
-# funktioniert, wie erwartet+#!/usr/bin/env bash 
 + 
 +# funktioniert, wie erwartet, aber Dateien mit Leerzeichen kann man so nur mit verbogenem IFS verarbeiten 
 IFS=$'\n' IFS=$'\n'
 DATEIEN=($(find . -type f -iname "Air Strike_*.mkv" | sed 's|^[.]/||' | sort)) DATEIEN=($(find . -type f -iname "Air Strike_*.mkv" | sed 's|^[.]/||' | sort))
Zeile 1069: Zeile 1128:
   > echo ${#ARRAY[2]}   > echo ${#ARRAY[2]}
   255   255
 +
 +  > arrayLaenge=${#ARRAY[@]}
 +  > echo "Das Array enthält '${arrayLaenge}' Elemente."
 +  Das Array enthält '3' Elemente.
  
   > testarray=($(find Videos/ -type f))   > testarray=($(find Videos/ -type f))
/home/http/wiki/data/attic/bash.1714236633.txt · Zuletzt geändert: von manfred