Main /

Bash Schnippsel

Bash Schnippsel

/ HomePage / Computer / Software / Programmierung / Schnipsel

Bash Schnippsel und Beispiele

Diese Schnippsel und Code-Beispiele beziehen sich allein auf Shellscripte der Bash

String in lower case wandeln

 newstring=$( echo "$oldstring" | tr [:upper:] [:lower:] ) # old: 'A-Z' 'a-z'

Methode über AWK

 newstring=$( echo "$oldstring" | awk '{print tolower($0)}' )

if then else

 if [condition]; then
   expression(s)
 [ elif [condition]; then 
     ...  ]²
 [ else 
     ... ]³
 fi
  • ²) Darf beliebig oft vorkommen
  • ³) Darf genau einmal vorkommen

Funktionen

 function foo()
 {
    ...
    # return value
    echo '123'
 }

 # function call
 RESULT=`eval foo "parameter"`

wie alt ist eine Datei

 FILE=<Datei>
 HOWOLD=$(( `date +'%s'` - `stat -c %Y ${FILE}` ))

Die Variable $HOWOLD enthält jetzt das alter der Datei in Sekunden.

Beispiel wie es anwendbar ist:

 if [ $HOWOLD -gt 3600 ]; then
    echo "Datei alter als eine Stunde."
 fi

Dateien umbennen von klein nach groß

 for f in * ; do n=`ls $f | tr [:lower:] [:upper:]`; mv $f $n; done  

funktioniert. Gefunden: hier

100 mal mit for

 for i in {1..100}; do echo $i ; done

Array Zuweisung

Einem Bash Array etwas zuweisen geht mittels '=()' nur dann versteht die Bash es auch als Array, sonst ist es nur 'ein' String. Die außen liegenden Klammern sind somit überaus wichtig.

 BIGFILES=( $(ls -1 -t /alias/Gentoo/snapshots/*.bz2) )

Der Zugriff funktioniert jetzt über den Index. Der beginnt bei 0.

 BIGFILE=${BIGFILES[0]}

Damit hat man jetzt die zeitlich zuletzt angelegte Bzip2 Datei in der Variable 'BIGFILE'. Was genau passiert, wenn der Pfad Spaces enthält ist nicht geprüft und wird es auch nicht.

Anzahl der Codezeilen finden

Hier mal als Beispiel für java

 find . -type f -name '*.java' | xargs wc -l

Das Ergebnis ist eine Liste sämtlicher java Dateien mit der Ausgabe der jeweiligen Zeilen der einzelnen Dateien und zusätzlich eine Gesamtsumme. Also wieviele Zeilen sämtliche dateien enthalten.

Tüttel entfernen

 EGAL="\"tuettel weg\""; echo $EGAL | sed -e 's/^\"//' -e 's/\"$//

Im gegebenen String sind Anführungszeichen (Tüttel) und diese wollen wir mit sed entfernen.

if expression mit -n

 if [ -n $A ]; then ... # FALSCH!
 if [ -n "$A" ]; then ... # RICHTIG!

Immer Tüttel mit angeben.

lokale Variablen

 VAR=1
 function foo() {
   local VAR=2    # variable VAR ist hier local
 }

 foo

 # VAR ist immer noch 1!

echo to stderr

 >&2 echo "error"
 echoerr() { echo "$@" 1>&2; }
 echoerr das ist falsch

Es wird 'das ist falsch' an stderr weiter geleitet. So kann Fehlermeldungen ausgeben und trotzdem noch stdout für Pipes verwenden.

Dateiendung erkennen

 if [[ "$1" == *".gz" ]]; then
    COMMAND=zcat
 else
    COMMAND=cat
 fi
 COMMAND $1

So könnte man z.B. erkennen, ob der Parameter $1 ein gzipptes File ist oder nicht um dann entsprechend Log Dateien anders auszugeben. Natürlich sollte man für die Dateierkennung nicht die Datei-Endung heranziehen sondern das Programm 'file' aber das ist eine andere Geschichte.

Aktuelles Datum in eine Variable setzen

 DATUM=$(date +%Y-%m-%d)

Die Variable Datum enthält jetzt Jahr-Monat-Tag wer ein anderes Format wünscht, möge bitte die Man-Page lesen

Zeilen ausgeben, wenn z.B. 2. Wert != 0

Gegeben ist eine Datei wie folgende, die als 2. Wert ab und zu eine 0 enthält, diese sollen entfernt werden:

 1 0 1
 1 1 1
 2 0 1
 3 0 2
 2 2 2

Datei ausgeben, an awk pipen und wenn der 2. Wert nicht 0 ist die Zeile ausgeben.

 cat file | awk '{ if ($2 != 0) {print} }'

Output ist dann:

 1 1 1
 2 2 2

siehe auch

  • Programmierung
  • Dateien Wiederfinden mit find
  • ScriptMehrfach Script so erstellen, das es sehr häufig wieder verwendet werden kann
  • Yad en Fork of Zenity (Sinnlose Info winking smiley ) Es ist ein Shellprogramm, das Dialogboxen für Shellscripte bereit stellt. IMHO führt man Batchcommandos adabsurdum, wenn diese eine Eingabe über eine UI verlangen, da Batchfiles ja dafür geschrieben werden, dass sie mehrfach gerufen werden können und das ohne UI-Rückmeldung.
  • http://mywiki.wooledge.org/BashFAQ/031
Frische Änderungen | Menü editieren
zuletzt geändert am 19.02.2020 11:48 Uhr von Lars
Edit Page | Page History