Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
/ HomePage / Computer / Software / Programmierung / Schnipsel
Diese Schnippsel und Code-Beispiele beziehen sich allein auf Shellscripte der Bash
newstring=$( echo "$oldstring" | tr [:upper:] [:lower:] ) # old: 'A-Z' 'a-z'
Methode über AWK
newstring=$( echo "$oldstring" | awk '{print tolower($0)}' )
if [condition]; then expression(s) [ elif [condition]; then ... ]² [ else ... ]³ fi
function foo() { ... # return value echo '123' } # function call RESULT=`eval foo "parameter"`
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
for f in * ; do n=`ls $f | tr [:lower:] [:upper:]`; mv $f $n; done
funktioniert. Gefunden: hier
for i in {1..100}; do echo $i ; done
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.
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.
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 [ -n $A ]; then ... # FALSCH! if [ -n "$A" ]; then ... # RICHTIG!
Immer Tüttel mit angeben.
VAR=1 function foo() { local VAR=2 # variable VAR ist hier local } foo # VAR ist immer noch 1!
>&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.
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.
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
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
find