\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{plaguedoctor} \pdfinfo{ /Title (bash-scripting-for-beginners.pdf) /Creator (Cheatography) /Author (plaguedoctor) /Subject (Bash Scripting for Beginners Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{132E87} \definecolor{LightBackground}{HTML}{F7F8FB} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Bash Scripting for Beginners Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{plaguedoctor} via \textcolor{DarkBackground}{\uline{cheatography.com/209408/cs/45001/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}plaguedoctor \\ \uline{cheatography.com/plaguedoctor} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 15th November, 2024.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{x{2.73735 cm} x{2.23965 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Skript Datei}} \tn % Row 0 \SetRowColor{LightBackground} Datei anlegen & touch myscript.sh \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} Datei ausführbar machen & chmod +x myscript.sh \tn % Row Count 3 (+ 2) % Row 2 \SetRowColor{LightBackground} Skript ausführen & sh myscript.sh \tn % Row Count 4 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Erste Zeile jedes Skripts}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{\#!/bin/bash}} \newline % Row Count 1 (+ 1) Diese Zeile weist das System an, das Skript in der BASH-Shell auszuführen, unabh{\"a}ngig davon, welche Shell der Benutzer standardm{\"a}{\ss}ig verwendet. Das Format ist {\bf{\#!}}, gefolgt vom Pfad zum Interpreter, normalerweise {\bf{/bin/bash}}.% Row Count 6 (+ 5) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Input/Output}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Mit {\bf{Input}} sind die Daten oder Informationen gemeint, die ein Programm empf{\"a}ngt oder liest. Die Eingaben kann aus verschiedenen Quellen stammen: \{\{nl\}\}Umgebungsvariablen, Kommandozeilen-Argumente, Dateien\{\{nl\}\}Im Skript wird das {\bf{read}} Keyword verwendet, um User-Input einzulesen} \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Unter {\bf{Output}} versteht man die Informationen oder Daten, die ein Programm generiert oder schreibt. Die Ausgabe kann an verschiedene Ziele geleitet werden:\{\{nl\}\}Umgebungsvariablen, Kommandozeilen-Argumente eines anderen Programms, Dateien\{\{nl\}\}Im Skript wird das {\bf{echo}} Keyword verwendet, um Output in der Konsole auszugeben} \tn % Row Count 13 (+ 7) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{0.89586 cm} x{4.08114 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Quoting}} \tn % Row 0 \SetRowColor{LightBackground} \seqsplit{'.....'} & Variablen werden nicht durch Werte ersetzt​ \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \seqsplit{"....."} & Variablen werden durch Werte ersetzt​ \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} \textbackslash{}`.....\textbackslash{}` & Inhalt wird als Kommando ausgeführt​ \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} .....\textless{}\textless{} & Bequem l{\"a}ngere Texte ausgeben \tn % Row Count 7 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Basic Variablen}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{VAR1=abc}} \newline % Row Count 1 (+ 1) Werden definiert durch Name + Gleichzeichen + Wert (alles ohne Leerzeichen) \newline % Row Count 3 (+ 2) Für Strings k{\"o}nnen Anführungszeichen (einfache oder doppelte benutzt werden, müssen aber nicht) \newline % Row Count 5 (+ 2) Zugriff auf den Inhalt der Variablen mit {\bf{\$VAR1}} oder {\bf{\$\{VAR1\}}}% Row Count 7 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.09494 cm} x{3.88206 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Reservierte Variablen}} \tn % Row 0 \SetRowColor{LightBackground} {\bf{\$\$}} & Prozess-ID  \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} {\bf{\$?}} & Return-Code \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} {\bf{\$1 - \$n}} & Übergebene Parameter \tn % Row Count 4 (+ 2) % Row 3 \SetRowColor{white} {\bf{\$*}} & Alle Parameter – als ein Wort \tn % Row Count 5 (+ 1) % Row 4 \SetRowColor{LightBackground} {\bf{\$@}} & Alle Parameter – als List von W{\"o}rtern \tn % Row Count 7 (+ 2) % Row 5 \SetRowColor{white} {\bf{\$0}} & Skriptname (Aufruf) \tn % Row Count 8 (+ 1) % Row 6 \SetRowColor{LightBackground} {\bf{\$\#}} & Anzahl der Parameter \tn % Row Count 9 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{For Schleife}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Einfach:}} \newline % Row Count 1 (+ 1) `for variable in list; do` \newline % Row Count 2 (+ 1) ` command1` \newline % Row Count 3 (+ 1) ` command2` \newline % Row Count 4 (+ 1) `done` \newline % Row Count 5 (+ 1) {\bf{Verschachtelt:}} \newline % Row Count 6 (+ 1) `for i in \{1..3\}; do` \newline % Row Count 7 (+ 1) ` for j in \{a..c\}; do` \newline % Row Count 8 (+ 1) ` echo "\$i\$j"` \newline % Row Count 9 (+ 1) ` done` \newline % Row Count 10 (+ 1) `done`% Row Count 11 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{While Schleife}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{while {[} condition {]}; do \newline command1 \newline command2 \newline done} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{While-Schleifen führen einen Befehlsblock aus, solange eine angegebene Bedingung erfüllt ist.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Until}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{until {[} condition {]}; do \newline command1 \newline command2 \newline done} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Until-Schleifen {\"a}hneln While-Schleifen, werden jedoch ausgeführt, bis eine Bedingung erfüllt ist.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Continue / Break}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Auf der anderen Seite wird die {\bf{Continue}}-Anweisung verwendet, wenn wir eine bestimmte Iteration überspringen müssen. Immer wenn wir eine continue-Anweisung schreiben, wird der gesamte Code nach dieser Anweisung übersprungen und die Schleife wird zur n{\"a}chsten Iteration fortgesetzt.} \tn % Row Count 6 (+ 6) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Eine {\bf{Break}}-Anweisung wird verwendet, wenn wir die laufende Schleife beenden m{\"o}chten, wenn eine bestimmte Bedingung eintritt. Immer wenn eine Break-Anweisung auftritt, wird die Schleife unterbrochen und die Ausführung gestoppt.} \tn % Row Count 11 (+ 5) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{If Abfrage}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{if {[} condition {]}; then \newline commands \newline elif {[} condition {]}; then \newline commands \newline else \newline commands \newline fi} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Es gibt mehrere verschieden Schreibweisen und auch Kurzformen} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Switch Case}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{case expression in \newline pattern1) \newline commands \newline ;; \newline pattern2) \newline commands \newline ;; \newline *) \newline default\_commands \newline ;; \newline esac} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{If-Anweisungen werden für komplexe Bedingungen und case-Anweisungen für einfachere, musterbasierte Übereinstimmungen} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Funktionen}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Funktion ohne Rückgabe:}} \newline % Row Count 1 (+ 1) `function\_name() \{` \newline % Row Count 2 (+ 1) ` commands` \newline % Row Count 3 (+ 1) `\}` \newline % Row Count 4 (+ 1) {\bf{Funktion mit Rückgabe::}} \newline % Row Count 5 (+ 1) `function\_name() \{` \newline % Row Count 6 (+ 1) ` commands` \newline % Row Count 7 (+ 1) ` {\emph{return}} result` \newline % Row Count 8 (+ 1) `\}` \newline % Row Count 9 (+ 1) .% Row Count 10 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{5.377cm}}{Rückgabe: Für Strings muss {\emph{echo}} ​verwendet werden​ und {\emph{return}} erwartet einen ​numerischen Return code​} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{x{1.94103 cm} x{3.03597 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Kommandotrenner}} \tn % Row 0 \SetRowColor{LightBackground} kommando1 {\bf{;}} kommando2 & Kommandos werden hintereinander ausgeführt \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} kommando1 {\bf{\&}} kommando2 & Erstes Kommando in Hintergrund \tn % Row Count 4 (+ 2) % Row 2 \SetRowColor{LightBackground} kommando1 {\bf{\&\&}} kommando2 & Logisch und \tn % Row Count 6 (+ 2) % Row 3 \SetRowColor{white} kommando1 {\bf{||}} kommando2 & Logisch oder \tn % Row Count 8 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Kommandosubstitution}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{1) `CMD\_OUT=\textbackslash{}`ls -la\textbackslash{}`` \newline % Row Count 1 (+ 1) 2) `CMD\_OUT=\$(ls -la)` \newline % Row Count 2 (+ 1) Bei der Kommandosubstitution wird der Inhalt der Klammern / Backticks als Kommando ausgeführt und das Ergebnis nach „links" übergeben.​ \newline % Row Count 5 (+ 3) In diesen Beispielen wird die Rückgabe der Kommandos in `\$CMD\_OUT` gespeichert​% Row Count 7 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.68655 cm} x{3.43275 cm} p{0.4577 cm} } \SetRowColor{DarkBackground} \mymulticolumn{3}{x{5.377cm}}{\bf\textcolor{white}{Arithmetische Operatoren}} \tn % Row 0 \SetRowColor{LightBackground} -gt & gr{\"o}{\ss}er als & \textgreater{} \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} -ge & gr{\"o}{\ss}er gleich & \textgreater{}= \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} -lt & kleiner als & \textless{} \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} -le & kleiner gleich & \textless{}= \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} -eg & gleich & == \tn % Row Count 5 (+ 1) % Row 5 \SetRowColor{white} -ne & nicht gleich & != \tn % Row Count 6 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}---} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{p{0.4977 cm} x{4.4793 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{5.377cm}}{\bf\textcolor{white}{Testen von Dateien}} \tn % Row 0 \SetRowColor{LightBackground} -e & Datei existiert \tn % Row Count 1 (+ 1) % Row 1 \SetRowColor{white} -f & ist regul{\"a}re Datei \tn % Row Count 2 (+ 1) % Row 2 \SetRowColor{LightBackground} -s & nicht gr{\"o}{\ss}er Null \tn % Row Count 3 (+ 1) % Row 3 \SetRowColor{white} -d & ist ein Verzeichnis \tn % Row Count 4 (+ 1) % Row 4 \SetRowColor{LightBackground} -L & ist ein symbolischer Link \tn % Row Count 5 (+ 1) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}