Bash

Angelegt Dienstag 23 Januar 2018

Tool for learning about shell commands in Linux: ://explainshell.com/
Open Book Shell-Programmierung : http://openbook.rheinwerk-verlag.de/shell_programmierung/index.htm
Tutorial : https://www.shellscript.sh/
Gute Kommandosammlung : https://ss64.com/bash/
Gute breitere Einführung : https://doc.opensuse.org/documentation/leap/startup/html/book.opensuse.startup/part.bash.html
Gute knappe Einführung : https://mywiki.wooledge.org/BashGuide

Sehr hilfreich für Scripting : https://wiki.ubuntuusers.de/Skripte/

Grundsätzliches
#!/bin/bash : Erste Zeile in einem Bash-File
echo $0 : Liefert verwendete shell (-bash = login-shell, bash = ohne - keine login-shell). (Info)
set -x : Druckt jedes Kommando bei Script-Ausführung. Gut für Debugging.

Kommandoersetzung
$ echo das ist ein test : Ausgabe der vier Parameter das ist ein test.
$ echo "das ist ein test" : Ausgabe des String-Parameter das ist ein test.
$ echo "An $LANG ton \$" : Liefert An en_US.UTF-8 ton $ . (Variablenersetzung+Entwertung)
$ echo "An $LANG ton \$" : Liefert An $LANG ton \$ .
$ echo "$(ls -a)" : liefert den Output des Kommandos ls -a .(Kommandoersetzung)

Prozesse anzeigen
$ ps -f : Alle Prozesse des Teminals (-f im Detail, -F noch mehr Details, -e alle Prozesse)
$ ps aux : Alle Prozesse im Detail
$ ps -ejHF : Alle Prozesse im Detail und in Baumdarstellung.
$ pstree -p : Prozessbaum (-p anzeigen der PID, -u anzeigen des uid-Übergang)
$ pstree -p | grep systemd : Alle Zeile im Prozessbaum anzeigen, in denen systemd vorkommt.

Prozesse managen
$ (sleep 10; echo "Hallo") & : Skriptprozess Im Hintergrund starten (&) . ("10 Sekunden schlafen und dann Hallo sagen").
$ [Strg] C : Anhalten des gerade laufenden Vordergrundprozesses in der bash.
$ kill -15 PID bzw. kill -9 PID : Den Prozess PID sanft mit Terminalsignal bzw. hart beenden (PID = -1: alle Prozesse des Terminals beenden).
$ bg %5 bzw. fg %5 : Den Prozess 5 des Terminals in den Hintergrund bzw. Vordergrund schieben.
$ exec command : Shell-Prozess geht (ohne fork) in neuen Prozess über.
$ exec -l bash : bash als non-login shell ausführen (+initialisieren).

Kommandos ausführen (https://wiki.ubuntuusers.de/Shell/Operatoren/):
$ ./myscript : den ausführenbar File myscript des lokalen Verzeichnisses in einer neuen shell ausführen ("das Script executen"). Falls Suchpfad nicht in $Path, muss Pfad explizit angegeben werden.
$ source myscript oder . myscript : den File myscript laden und in der aktiven Shell ausführen ("das Script sourcen").
$ com1 ; com2 : Hintereinanderausführung vom Kommandos.
$ com1 | com2 : Hintereinanderausführung vom Kommandos, wobei die Ausgabe von com1 an com2 weitergeleitet wird (Pipeline).
$ com1 && com2 : Kommando com2 wird nur dann ausgeführt, wenn com1 erfolgreich war (bedingte Ausführung).
$ com1 || com2 : Kommando com2 wird nur ausgeführt, wenn com1 nicht erfolgreich (bedingte Ausführung).
$ (com1 ; com2) : Die beiden Kommandos werden in einer untergeordneten Subshell ausgeführt.
$ {com1 ; com2} : Die beiden Kommandos werden in der aktuellen Shell ausgeführt.
$ echo $? : Rückgabewert des letzten Kommandos ausgeben. (Exit Codes)
$ true : Kommando, das true (=0) als Rückgabewert liefert. (false =1).
$ eval "ls -a" : Den String als Kommando ausführen.

Kanäle und Umleitungen (http://wiki.bash-hackers.org/h1owto/redirection_tutorial)
0, 1, 2 : Filedeskriptoren für die Standard-Kanäle stdin (0), stdout (1) und stderr (2) .
> file : Standard-Output in file umleiten
&> file : Standard-Output+Error in file umleiten
>> file : Output an file anhängen
< file : Input aus file lesen
2> file : Fehlermeldungen in file umleiten
2> /dev/null : Fehlermeldungen wegschmeißen
2>&1 : Standard-Error-Kanal an Standard-Output umleiten
$ echo <(ls .) : Der Filedeskriptor des Outputs von ls . wird als String-Parameter an echo übergeben.
$ . >(true) : Den aktuellen Standardinput an eine Subshell weiterleiten, die diesen ausgibt.

Umgebungsvariable
~/.profile : Datei, in der der Benutzer seine eigenen Umgebungsvariablen setzen kann.
~/.bash_profile : Execute-Datei für Login-Shell. Wird Einloggen ausgeführt. Hier die Execute-Datei .bashrc ausführen. (überschreibt ~/.profile)
/etc/environment : File mit systemweiten Umgebungsvariablen
$ printenv, env : Alle Umgebungsvariable, die für aus der Shell gestartete Prozesse verfügbar sind (= exportierte Variablen). (help.ubuntu)
$ echo $HOSTNAME $HOME $PWD $PATH : Ausgabe wichtiger Umgebungsvariablen.
$ MYVAR="Wert77" : Eine Shellvariable MyVar erzeugen. (Diese gilt - ohne export - nur in der laufenden Shell und wird nicht an Kinder vererbt.)
$ echo ${PARAM:-word} : Ausgabe von Wert von PARAM. Falls nicht gesetzt, wird die Expansion von word ausgegeben.
$ export MYVAR="Wert77" : Eine Umgebungsvariable MyVar erzeugen und ihr den Wert Wert77 zuweisen. (Damit steht sie als Umgebungsvariable auch in aufgerufenen Programmen zur Verfügung.)
$ unset MYVAR : Löschen der vonUmgebungsvariablen MyVar.
$ PATH="$HOME/bin:$PATH" : PATH erweitern. Für permanente Änderung Zuweisung in ~/.profile eintragen. (https://wiki.ubuntuusers.de/Umgebungsvariable/)

Alias und history
$ alias : Alle definierten Alias-Kommandos anzeigen.
$ alias h=history : Den Alias h für das Kommando history setzen. (Rückgängig machen mit unalias h . Tipp: aliases in ~/.bash_aliases schreiben.)
$ alias sudo='sudo ' : Sinnvoll, denn Alias checked nur erstes Wort bzgl alias, außer der Alias endet auf einen blank.
$ history 7 : Die letzten 7 Kommandos anzeigen.
$ !7 : Das Kommando 7 ausführen.
$ history -cw : History löschen (oder den gesamten File .bash_history löschen.)
<CTRL> + R : Reverse Befehlssuche (Tastenkombination drücken und dann die Anfangsbuchstaben des Befehls eingeben.)

Bash-Prompt anpassen
In Datei ~/.bashrc die Variable PS1 mit einem Editor entsprechend setzen. Beispiele:
- hellgrüne Schrift: PS1="\[\033[1;32m\]\u@\h\[\\033[0m\] \[\033[1;34m\]\w\[\033[0m\] >"
- hellrote Schrift: PS1="\[\033[1;31m\]\u@\h\[\\033[0m\] \[\033[1;34m\]\w\[\033[0m\] >"
- Schwarze Schrift, grün hinterlegt: PS1="\[\033[0;30m\]\[\033[42m\]\u@\h\[\\033[0m\] \[\033[1;34m\]\w\[\033[0m\] >"
- hellgraue Schrift, rot hinterlegt: PS1="\[\033[0;30m\]\[\033[41m\]\u@\h\[\\033[0m\] \[\033[1;34m\]\w\[\033[0m\] >"
Infos: https://wiki.ubuntuusers.de/Bash/Prompt/

Terminal
$ env | grep TERM : Gibt das verwendete Termnal aus.
$ TERM=xterm-256color : Setzt auf X-Terminal mit 256 Farben.
$ tput colors : Zeigt Anzahl der benutzten Terminalfarben.
$ tput longname: Zeigt den Namen des Terminals an.

Makefile
What is a Makefile and how does it work? : https://opensource.com/article/18/8/what-how-makefile



Backlinks:
1 Ubuntu