270 lines
9.7 KiB
TeX
Executable File
270 lines
9.7 KiB
TeX
Executable File
\section{Variablen}
|
|
\subsection{Definition}
|
|
\begin{justify}
|
|
%\begin{flushleft}
|
|
Jede Variable hat einen Namen und einen Wert. Typen kennt die Bash nur eingeschr\"angt. Um eine Variable in einem Bash Script zu definieren, kann der Befehl {\ttfamily declare\index{declare}} benutzt werden.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiele]
|
|
uws@tux>wert=3+7
|
|
uws@tux>echo $wert
|
|
3+7
|
|
|
|
uws@tux>declare -i wert
|
|
uws@tux>echo $wert
|
|
3+7
|
|
|
|
uws@tux>wert=3+7
|
|
uws@tux>echo $wert
|
|
10
|
|
|
|
uws@tux>declare -u choise
|
|
uws@tux>choise=yes
|
|
uws@tux>echo $chaoise
|
|
YES
|
|
|
|
uws@tux>declare -l choise
|
|
uws@tux>choise=YES
|
|
uws@tux>echo $choise
|
|
yes
|
|
\end{lstlisting}
|
|
Hier eine kurze Liste der Typen.
|
|
\begin{longtable}[l]{p{1.5cm}p{14.5cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Attribut}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Attribut}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{Attribute} \\
|
|
\endlastfoot
|
|
-p & Zeigt alle Attribute aller Variablen an\\
|
|
-i & Arithmetische Auswertung\\
|
|
-a & Array Index\\
|
|
-A & Array Namen\\
|
|
-u & Der Wert wird in Gro"ss buchstaben umgewandelt\\
|
|
-l & Der Wert wird in Kleinbuchstaben umgewandelt\\
|
|
-r & Nach der Zuweisung kann dieser Wert nicht mehr ver"andert werden, sie ist dann eine Konstante\\
|
|
\end{longtable}
|
|
\newpage
|
|
Weitere Informationen hierzu gibt es auf der Seite \url{http://tldp.org/LDP/abs/html/declareref.html}.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Zuweisung mittels Befehl, label=lst:bash]
|
|
uws@tux>strMachine="Computer Name: `uname -a | cut -d ' ' -f 2`"
|
|
uws@tux>echo $strMachine
|
|
Computer Name: tux
|
|
\end{lstlisting}
|
|
Die auszuf\"uhrenden Befehle stehen zwischen R"uckwertigen Hochkommas.\\
|
|
Auch mit {\ttfamily typeset} werden Variablen mit einem Typ definiert. Standardm\"assig werden auch hier Variablen ohne Angabe des Typs als {\ttfamily string} Variable deklariert. Die Angabe eines Wertes ist optional.\\
|
|
Die Syntax f"ur {\ttfamily typeset} ist:\\[1ex]
|
|
{\ttfamily typset [option] [variable] [=wert]}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel typeset, label=lst:bash]
|
|
uws@tux>cat example1.sh
|
|
#!/bin/env bash
|
|
typeset -i var1=2 # Variable var1 als integer mit einem Wert
|
|
|
|
typeset +i var1 # Abschalten der definition
|
|
\end{lstlisting}
|
|
\begin{longtable}[l]{p{1.5cm}p{14.5cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Option}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Option}} & \multicolumn {1}{l}{\textbf{Beschreibung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{Typeset Options} \\
|
|
\endlastfoot
|
|
-a & Array\\
|
|
-i & Integer\\
|
|
-r & Konstante (read only)\\
|
|
-x & Varaible exportieren\\
|
|
-f & Zeigt Funktionen mit ihrer Definition an\\
|
|
-fx & Exportiert eine Funktion\\
|
|
-F & Zeigt Funktionen ohne ihre Definition an\\
|
|
\end{longtable}
|
|
%-------------------------------------------------------------------------------
|
|
% Variablen laenge
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Variablen l\"ange}
|
|
Die L\"ange eines Strings, die einer Variable zugewiesen worden ist, kann man folgenderma\ss en ermitteln.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Variable l\"ange]
|
|
uws@tux>cat varlength.sh
|
|
#!/bin/bash
|
|
A="$1" X=${#A}
|
|
echo -n "*" # Ausgabe ohne newline
|
|
printf " Laenge der Variable A: ${X}\n"
|
|
|
|
uws@tux>./varlength.sh Weihnachten
|
|
* Laenge der Variable A: 11
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Variablen default
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Variablen default}
|
|
Falls ein Parameter / Variable nicht gesetzt wird, so kann man ein Default Wert f"ur diese Variable setzen.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Variable default]
|
|
uws@tux>cat varDefault.sh
|
|
#!/bin/bash
|
|
MinSize=${1:-50M}
|
|
printf "Minimum Size: $MinSize\n"
|
|
|
|
uws@tux>./varDefault.sh
|
|
Minimum Size: 50M
|
|
|
|
uws@tux>./varDefault.sh 125M
|
|
Minimum Size: 125M
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Variablen Warnung
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Variablen Warnung}
|
|
Wenn ein Parameter / Variable nicht definiert wird, so wird dann eine Message ausgegeben. Nicht interktive Shells terminieren anschlie"send.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Variable Warnung]
|
|
uws@tux>cat varWarnung.sh
|
|
#!/bin/bash
|
|
FileName=${1:?Missing filename.}
|
|
printf "File Name: $FileName\n"
|
|
|
|
uws@tux>./varWarnung.sh
|
|
varWarnung.sh: Zeile 2: 1: Missing filename.
|
|
|
|
uws@tux>./varWarnung.sh Mail.log
|
|
File Name: Mail.log
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Array
|
|
%-------------------------------------------------------------------------------
|
|
\newpage
|
|
\subsection{Array}
|
|
Ein Array wird mit {\ttfamily declare -a} oder mit {\ttfamily declare -A} definiert. Bei der ersten Zuweisung werden die Werte mit einer Indexnummer versehen und bei der zweiten Zuweisung kann man einen Bezeichner selbst "ubergeben. Die Syntax f"ur die Zuweisung von Werten ist folgenderma\ss en.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Syntax Array]
|
|
declare -a <arrayname>
|
|
arrayname=(wert1 wert2 wert3)
|
|
arrayname[indexnr]=wert
|
|
\end{lstlisting}
|
|
Wird keine Index Nummer bei der Zuweisung der Werte angegeben, so startet die Index Nummer bei {\ttfamily 0} f\"ur den ersten Wert.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiele Array]
|
|
uws@tux>declare -a MyUser=('Harry' 'Paul' 'Walter')
|
|
uws@tux>for ((i=0;i<=2;i++)); do echo User: ${MyUser[$i]}; done
|
|
User: Harry
|
|
User: Paul
|
|
User: Walter
|
|
|
|
uws@tux>echo ${MyUser[@]}
|
|
Harry Paul Walter
|
|
|
|
uws@tux>echo ${!MyUser[@]}
|
|
0 1 2
|
|
|
|
uws@tux># Anstelle von @ kann auch ein * genommen werden
|
|
uws@tux>echo ${#MyUser[*]}
|
|
3
|
|
|
|
uws@tux>for i in ${!MyUser[*]}; do echo User: ${MyUser[$i]}; done
|
|
User: Harry
|
|
User: Paul
|
|
User: Walter
|
|
|
|
uws@tux>#Wert hinzufuegen zum array
|
|
uws@tux>MyUser+=('Andrea' 'Silvia')
|
|
uws@tux>echo ${MyUser[@]}
|
|
Harry Paul Walter Andrea Silvia
|
|
|
|
uws@tux>#Loeschen von Werten vom array
|
|
uws@tux>unset -v MyUser[2]
|
|
uws@tux>echo ${MyUser[@]}
|
|
Harry Paul Andrea Silvia
|
|
|
|
uws@tux>declare -A MyText[Start]='Starts here'
|
|
uws@tux>MyText['End Text']='The Last one'
|
|
uws@tux>echo ${MyValue['End Text']} - ${MyValue[Start]}
|
|
The Last one - Starts here
|
|
\end{lstlisting}
|
|
\newpage
|
|
\subsection{Gro\ss - / Kleinbuchstaben}
|
|
Seit der Bash Version 4 kann man ganz einfach den Wert einer Variable in Gro\ss - oder in Kleinbuchstaben umwandeln. Es k"onnen der erste oder alle Buchstaben umgewandelt werden. Mit {\ttfamily -u} wandelt alle Buchstaben in Gro\ss buchstaben um und ein {\ttfamily -l} wandelt alle Buchstaben in Kleinschreibung um.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Gro\ss - / Kleinbuchstaben]
|
|
uws@tux># Umwandeln in Gro\ss buchstaben
|
|
uws@tux>declare -u Wert1
|
|
uws@tux>Wert1=klein
|
|
uws@tux>echo $Wert1
|
|
KLEIN
|
|
|
|
uws@tux># Umwandeln in Kleinbuchstaben
|
|
uws@tux>declare -l Wert2
|
|
uws@tux>Wert2=GROSS
|
|
uws@tux>echo $Wert2
|
|
gross
|
|
\end{lstlisting}
|
|
Soll der erste Buchstabe umgewandelt werden oder alle Buchstaben, kann man das folgenderma"sen machen.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Werte umwandeln]
|
|
uws@tux>an=paulchen
|
|
uws@tux>echo ${an^}
|
|
Paulchen
|
|
uws@tux>echo ${an^^}
|
|
PAULCHEN
|
|
uws@tux>echo ${an^^c}
|
|
paulChen
|
|
|
|
uws@tux>PAULCHEN
|
|
uws@tux>echo ${an,}
|
|
pAULCHEN
|
|
uws@tux>echo ${an,,}
|
|
paulchen
|
|
uws@tux>echo ${an,,U}
|
|
PAuLCHEN
|
|
\end{lstlisting}
|
|
\newpage
|
|
%-------------------------------------------------------------------------------
|
|
% Subsection: String-Operationen
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{String-Operationen}
|
|
In der nachfolgenden Tabelle werden die String-Operationen aufgelistet.
|
|
\begin{longtable}[l]{p{4.0cm}p{12.0cm}}
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Operation}} & \multicolumn {1}{l}{\textbf{Bedeutung}} \\
|
|
\hline
|
|
\hline
|
|
\endfirsthead
|
|
\multicolumn{2}{r}{{\bfseries continued from previous page.}} \\
|
|
\rowcolor{hellgrau}\multicolumn{1}{l}{\textbf{Operation}} & \multicolumn {1}{l}{\textbf{Bedeutung}} \\
|
|
\hline
|
|
\hline
|
|
\endhead
|
|
\multicolumn{2}{r}{{\bfseries Continued on next page}} \\
|
|
\endfoot
|
|
\caption{String-Operationen} \\
|
|
\endlastfoot
|
|
\verb|${#var}| & L"ange von \verb|${var}| (Variablenwert) in Zeichen \\
|
|
\verb|${var:-text}| & "text, wenn var leer oder nicht existiert, sonst \verb|${var}| \\
|
|
\verb|${var:+text}| & \verb|""|, falls var leer oder nicht existiert, sonst "text" \\
|
|
\verb|${var:=text}| & var="text" falls var leer oder nicht existiert \\
|
|
\verb|${var:offset:länge}| & \verb|${var}| ab Position offset vom Anfang (wenn negativ: vom Ende) mit (optional) l"ange Zeichen \\
|
|
\verb|${var:#muster}| & \verb|${var}| ohne muster am Anfang (minimale "Ubereinstimmung) \\
|
|
\verb|${var:##muster}| & \verb|${var}| ohne muster am Anfang (maximale "Ubereinstimmung) \\
|
|
\verb|${var:%muster}| & \verb|${var}| ohne muster am Anfang (minimale "Ubereinstimmung) \\
|
|
\verb|${var:%%muster}| & \verb|${var}| ohne muster am Anfang (maximale "Ubereinstimmung) \\
|
|
\verb|${var/muster}| & \verb|${var}| ohne das erste muster \\
|
|
\verb|${var//muster}| & \verb|${var}| ohne alle muster \\
|
|
\verb|${var/muster/text}| & \verb|${var}|, wobei das erste muster durch text ersetzt wurde \\
|
|
\verb|${var//muster/text}| & \verb|${var}|, wobei alle muster durch text ersetzt wurden \\
|
|
\end{longtable}
|
|
|
|
%\end{flushleft}
|
|
\end{justify} |