updated: | 2024 10. July |
published: | 2021 30. September |
The Bourne-Again Shell
Sammelsurium zur Linux Bash.Kommandos
xargs - Dateien löschen die sich in einer Liste befinden
xargs rm -v < liste.txt
columne - Listen spaltenweise ausgeben
cat /etc/passwd | column -t -s ":"
Shellvariable PS
Für die Ausgabe von Informationen auf der Konsole (Shell) stehen die Shellvariable PS0 bis PS4 zur Verfügung. Für einen Test kann die Variable PS1 einfach in einer Shell definiert werden, z.B.:
PS1='\s \v \W \h \$> '
PS1='${debian_chroot:+($debian_chroot)}\u@\h: \w \$: '
# Bei doppelten Anführungszeichen muss maskiert werden
PS1="${debian_chroot:+($debian_chroot)}\\u@\\h \\w \\$ "
# Festlegung der Variable in der Datei ~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;94m\]\u\[\033[01;92m\]@\[\033[01;33m\]\h\[\033[01;93m\]: \w\[\033[m\] \$ '
# oder mit Escapecharakter \e statt \033 für die Farbe
PS1='${debian_chroot:+($debian_chroot)}\[\e[01;94m\]\u\[\e[01;92m\]@\[\e[01;33m\]\h\[\e[01;93m\]: \w\[\e[m \$ '
# Ausgabe PS1 bis PS4
echo $PS0
echo $PS1
echo $PS2
echo $PS3
echo $PS4
Die Shellvariable PS1 kann folgende Informationen ausgeben.
Löschen in Strings
Lösche Zeichenkette rechts
declare APPL=Helmert-Version-2019.exe
declare SIGN=.exe
echo ${APPL%.exe} # Version 1 Ausgabe: Helmert-Version-2019
echo ${APPL%.*} # Version 2 Ausgabe: Helmert-Version-2019
echo ${APPL%$SIGN} # Version 3 Ausgabe: Helmert-Version-2019
echo ${APPL%Version*} # Version 4 Ausgabe: Helmert-
Lösche Zeichenkette links
declare APPL=Helmert-Version-2019.exe
echo ${APPL#Helmert} # Version 1 Ausgabe: -Version-2019
echo ${APPL#*mert} # Version 2 Ausgabe: -Version-2019
Dateiname splitten/teilen
declare APPL=Datei.Name.001.exe
declare Extension=${APPL##*.}
declare FileName=${APPL%.*}
echo $Extension # Ausgabe: exe
echo $FileName # Ausgabe: Datei.Name.001
# ... und mit zufälliger Zeichenfolge versehen
declare file1=$(mktemp $FileName.out.XXX.$Extension) # Version 1
declare file2=$(mktemp ${APPL%.*}.out.XXX.${APPL##*.}) # Version 2
echo $file1; rm $file1
echo $file2; rm $file2
Suchen und ersetzen in Strings
declare textstring="I am Karl and Karl"
declare replacetxt="Gustav"
echo ${textstring/Karl/$replacetxt}
# Ausgabe:
# I am Gustav and Karl
declare textstring="I am Karl and Karl"
declare replacetxt="Gustav"
echo ${textstring//Karl/$replacetxt}
# Ausgabe:
# I am Gustav and Gustav
declare textstring="I am Karl and Karl"
declare replacetxt="Gustav"
echo ${textstring/%Karl/$replacetxt}
# Ausgabe:
# I am Karl and Gustav
Mehrdimensionale Array in Bashscript verwenden
Ein Array kann als indiziertes Array (declare -a
) oder als assoziatives Array (declare -A
) erzeugt werden.
Ein assoziatives Array beinhaltet ein Wertepaar mit einer Zeichenkette als Schlüssel und einem Wert.
Der Wert wird mit dem Schlüssel angesprochen. Der Zugriff auf Arrayelemente eines indizierten Array erfolgt mit einem Index (fortlaufende Nummer).
Im Beispiel wird ein indiziertes Array mit zwei Zeilen und drei Spalten erzeugt. Folgende Regeln sind zu beachten. Eine Zeilen wird in Anführungszeichen deklariert und mit einem Backslash beendet. Als Spaltentrennzeichen wird das Leerzeichen verwendet. Das Array kann mit weiteren Zeilen ergänzt werden. Es ist auch Möglich eine unterschiedliche Spaltenanzahl zu verwenden.
declare -a array=()
array=( \
"C:\\Path\\to\\Programm Programmfile.exe Zelle13" \
"Zelle21 Zelle22 Zelle23" \
)
In einer FOR-Schleife wird jede Zeile aufgerufen und der Inhalt als komplette Zeile oder spaltenweise ausgegeben.
for ((i=0; i<${#array[@]}; i++)); do
# read row i and save
IFS=' ' read -r -a row <<< "${array[$i]}"
colcount=${#row[@]};
# Ausgabe Zeilenweise
echo -e "ArrayIndex = $i \t Spaltenanzahl = $colcount \t Inhalt = ${row[@]} \n";
# Ausgabe Spaltenweise
for ((c=0; c<${#row[@]}; c++)); do
echo -e "\t\t\t\t\t Spalte $c = ${row[$c]}";
done
echo -e "\n"
done
Der Zugriff auf ein inidiziertes Array.
IFS=' ' read -r -a tmp <<< "${array[1]}"
echo ${tmp[0]}
echo ${tmp[1]}
echo ${tmp[2]}