270 lines
9.3 KiB
TeX
Executable File
270 lines
9.3 KiB
TeX
Executable File
\section{Ein- und Ausgabe auf der Shell}
|
|
\subsection{Echo}
|
|
\begin{justify}
|
|
M\"ochte man Text auf der Konsole ausgeben, so kann man das mit dem Befehl {\ttfamily echo} erledigen.
|
|
Den Befehl {\ttfamily echo} kann man nicht nur in einem Script verwenden, sondern auch direkt in einer Shell,
|
|
wenn man zum Beispiel den Inhalt einer Variable sich anzeigen lassen m\"ochte.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel echo]
|
|
uws@tux>echo "Connected user: $USER"
|
|
Connected user: uws
|
|
\end{lstlisting}
|
|
Gibt man hinter dem Befehl {\ttfamily echo} die Option {\ttfamily -n} an, so bleibt der Cursour hinter den auszugebenden
|
|
Text stehen. Die Option {\ttfamily -e} erlaubt die {\ttfamily Backslash Escapes.}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Escape Sequence]
|
|
uws@tux>cat eingabe.sh
|
|
#!/bin/env bash
|
|
#
|
|
# Einlesen einer Benutzereingabe
|
|
#
|
|
echo -n -e "\tBitte Mysql Password eingeben: "
|
|
read strPasswd
|
|
\end{lstlisting}
|
|
%-------------------------------------------------------------------------------
|
|
% Section: Read
|
|
%-------------------------------------------------------------------------------
|
|
\subsection{Read}
|
|
Mit dem Befehl {\ttfamily read} kann man die Eingabe in einer Variable speichern. Ohne eine zus\"atzliche Option bei dem
|
|
Befehl {\ttfamily read}, wird die Eingabe nach einem Return in der Konsole wiederholt. Soll die Eingabe nicht angezeigt werden,
|
|
so gibt man hierzu die Option {\ttfamily -s} an. Diese Option unterdr\"uckt das Echo auf der Konsole.
|
|
Die Option {\ttfamily -v<zahl>} liest die angegebene Anzahl an Zeichen ein.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel read]
|
|
uws@tux>cat eingabe1.sh
|
|
#!/bin/env bash
|
|
#
|
|
# Einlesen einer Benutzereingabe
|
|
#
|
|
echo -n "Bitte Mysql Password eingeben: "
|
|
read -s -n10 strPasswd
|
|
\end{lstlisting}
|
|
|
|
\subsection{Printf}
|
|
In Bash Scripten und auch in der Konsole kann man den Befehl {\ttfamily printf} verwenden.
|
|
Mit diesem Befehl ist es m\"oglich, Zeilenvorsch\"ube und auch Tabs zu verwenden. Einen Zeilenvorschub
|
|
wird mit der Option {\ttfamily \textbackslash n} gemacht und mit {\ttfamily \textbackslash t} wird ein Tab erzeugt.
|
|
%\begin{flushleft}
|
|
In der nachfolgenden Tabelle werden die Konfigurationsdateien aufgelistet, die bei einem Login/Aufruf einer Shell in der Reihenfolge verarbeitet werden.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Printf]
|
|
uws@tux>cat Ausgabe.sh
|
|
#!/bin/env bash
|
|
#
|
|
# Ausgabe von Text
|
|
#
|
|
clear
|
|
printf "\n\n\t\t *******************************************"
|
|
printf "\n\n\t\t Dieses Programm wir ausgefuehrt"
|
|
printf "\n\t\t mit freundlicher Untestuetzung von"
|
|
printf "\n\t\t\ Seab@er Software AG"
|
|
printf "\n\n\t\t ********************************************\n"
|
|
\end{lstlisting}
|
|
|
|
{\ttfamily Printf} wurde von der Programmiersprache C entliehen. Der Aufbau ist {\ttfamily "\%Format" Daten}.
|
|
In der nachfolgenden Tabelle sind die Formatierungen aufgelistet.\\[2ex]
|
|
|
|
\begin{table}[ht]
|
|
|
|
\begin{tabular}{p{1.5cm}p{14.5cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
|
|
\rowcolor{hellgrau}\emph{\textbf{Format}} & \emph{\textbf{Beschreinung}} \\
|
|
\hline
|
|
\hline
|
|
\%5.2f & Flie"skomma mit f\"unf Stellen vor dem Komma und 2 Nachkomma Stellen\\
|
|
\%.10s & Zeichenkette mit maximal 10 Characters\\
|
|
\%X\textbackslash n & Hexadezimal mit Gro\ss buchstaben\\
|
|
\%y\textbackslash n & Hexadezimal mit Kleinbuchstaben\\
|
|
\%\#X\textbackslash n & Hexadezimal mit Gro\ss buchstaben und f\"uhrenden 0X\\
|
|
\%i\textbackslash n & Ganzzahl\\
|
|
\%s & Zeichenkette (string)\\
|
|
\%d & Dezimal\\
|
|
\end{tabular}
|
|
\caption{Formate}
|
|
\end{table}
|
|
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Formatierung]
|
|
uws@tux>cat format.sh
|
|
#!/bin/env bash
|
|
a=456.863
|
|
b=387,162
|
|
c="Ohne_Unterstrich_keine_Ausgabe"
|
|
printf "Wert a: %5.2f\n" `echo $a | tr . ,`
|
|
printf "Wert b= %5.2f\n" $b
|
|
printf "Wert c: %.30s\n Wert d: %.30s" $c "So geht es ohne _"
|
|
printf "%10.5s\n" "Linux-Magazin" # Ausgabe rechtsbuendig, Feldgroesse 10
|
|
printf "%-10.5s\n" "Linux-Magazin" # Ausgabe linksbuendig, Feldgroesse 10
|
|
printf "%.6s\n" "Linux-Magazin"
|
|
|
|
uws@tux>./format.sh
|
|
Wert a: 456,863
|
|
Wert b: 387,162
|
|
Wert c: Ohne_Unterstrich_keine_Ausgabe
|
|
Wert d: So geht es ohne _
|
|
Linux
|
|
Linux
|
|
Linux-
|
|
\end{lstlisting}
|
|
\begin{justify}
|
|
M\"ochte man den Text in Farbe ausgeben, so wird hierzu das Zeichen {\ttfamily ESC (\textbackslash 033)} verwendet. Nach dem {\ttfamily Escape} Zeichen wird die Farbe angegeben. Die Angabe bezieht sich dann nicht nur auf die Zeile, sondern auf alle Ausgaben von Texten. Deshalb sollte man nach dem zu f\"arbenden Text wieder die urspr\"ungliche Farbe eingestellt werden.
|
|
\end{justify}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Farbige Ausgabe]
|
|
uws@tux>cat ColorAusgabe.sh
|
|
#!/bin/env bash
|
|
#
|
|
# Ausgabe von Text in Farbe
|
|
#
|
|
clear
|
|
printf "\033[34m\n\n\t\t *******************************************"
|
|
printf "\033[33m\n\n\t\t Dieses Programm wir ausgefuehrt"
|
|
printf "\n\t\t mit freundlicher Untestuetzung von"
|
|
printf "\n\t\t\ Seab@er Software AG"
|
|
printf "\n\n\t\t ********************************************\n"
|
|
printf "\033[0m" # ursprüngliche Farbe einstellen.
|
|
\end{lstlisting}
|
|
\newpage
|
|
\begin{table}[ht]
|
|
\begin{tabular}{p{1cm}p{15cm}} % l => Text left, c => center, r => right, p => zeilenumbruch
|
|
\rowcolor{hellgrau}\emph{\textbf{Wert}} & \emph{\textbf{Farbe}} \\
|
|
\hline
|
|
\hline
|
|
0m & Reset der Farbe\\
|
|
01m & Fett\\
|
|
04m & Unterstreichen\\
|
|
05m & Blinkend\\
|
|
07m & Vorder- und Hintergrunffarbe vertauscht\\
|
|
22m & Normale Intensit\"at wiederherstellen\\
|
|
30m & Vordergrund schwarz\\
|
|
31m & Vordergrund rot\\
|
|
32m & Vordergrund gr\"un\\
|
|
33m & Vordergrund braun (gelb)\\
|
|
34m & Vordergrund blau\\
|
|
35m & Vordergrund magenta\\
|
|
36m & Vordergrund cyan\\
|
|
37m & Vordergrund wei\ss\\
|
|
40m & Hintergrund schwarz\\
|
|
41m & Hintergrund rot\\
|
|
42m & Hintergrund gr\"un\\
|
|
43m & Hintergrund braun\\
|
|
44m & Hintergrund blau\\
|
|
45m & Hintergrund magenta\\
|
|
46m & Hintergrund cyan\\
|
|
47m & Hintergrund wei\ss\\
|
|
49m & Voreingestellter Hintergrund\\
|
|
\end{tabular}
|
|
\caption{Farbwerte}
|
|
\end{table}
|
|
\begin{justify}
|
|
Wird bei {\ttfamily 33m} die Farbe braun ausgegeben und man m\"ochte aber die Farbe {\ttfamily Gelb} ausgeben, so kann kann man das mit der zus\"atzlichen Angabe von {\ttfamily 01m} machen.
|
|
\end{justify}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Gelbe Ausgabe]
|
|
uws@tux>printf "\033[01m\033[33mFarbe Gelb \033[33m und nun Braun."
|
|
\end{lstlisting}
|
|
Eine Farbausgabe des Textes kann auch mit der Sequence {\ttfamily \textbackslash e[1;32m} gemacht werden. Dieses funktionert auch mit {\ttfamily echo}. Hierzu wird noch die Option {\ttfamily -e} mit angegeben.\\
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Echo]
|
|
uws@tux>echo -e " \e[1;32m Dieser Text ist in Gr\"un. \e[1;0m"
|
|
\end{lstlisting}
|
|
%--------------------------------------------------------------------------------
|
|
% Subsection: Null
|
|
%--------------------------------------------------------------------------------
|
|
\subsection{Null}
|
|
Möchte man keine Ausgabe in der Shell haben, so kann man dieses nach {\ttfamily /dev/null} umlenken. Mit {\ttfamily 1} werden die normalen Ausgaben umgelenkt und mit {\ttfamily 2} die Fehlermeldungen.
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Null]
|
|
uws@tux>cat DemoNull.sh
|
|
#!/usr/bin/env bash
|
|
# %1 = erster Ausgabe Kanal, hier /dev/null
|
|
ping -w1 -c1 tux2 >/dev/null 2>%1
|
|
|
|
ssh ${USER}@${HOST} 'ls' 2> /dev/null
|
|
\end{lstlisting}
|
|
\newpage
|
|
%--------------------------------------------------------------------------------
|
|
% Subsection: Beispiele
|
|
%--------------------------------------------------------------------------------
|
|
\subsection{Beispiele}
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Textbox]
|
|
uws@tux>cat textbox.sh
|
|
#!/bin/env bash
|
|
box()
|
|
{
|
|
printf '*%.0s' $(seq 1 67) # Print * with length 67
|
|
printf "\n"
|
|
}
|
|
|
|
content()
|
|
{
|
|
printf "*"
|
|
if [ $# -eq 0 ]; then
|
|
printf ' %.0s' $(seq 1 65)
|
|
elif [ $# -eq 1 ]; then
|
|
TEXTR="$1"
|
|
printf ' %.0s' $(seq 1 17)
|
|
printf "${TEXTR}"
|
|
printf ' %.0s' $(seq 1 $[48-${#TEXTR}])
|
|
elif [ $# -eq 2 ]; then
|
|
TEXTL="$1"
|
|
TEXTR="$2"
|
|
printf ' %.0s' $(seq 1 3)
|
|
printf "${TEXTL}"
|
|
printf ' %.0s' $(seq 1 $[14-${#TEXTL}])
|
|
printf "${TEXTR}"
|
|
printf ' %.0s' $(seq 1 $[48-${#TEXTR}])
|
|
fi
|
|
printf "*\n"
|
|
}
|
|
|
|
SCRIPTVERSION="13.01.07"
|
|
|
|
IFS=$'\012'
|
|
|
|
box
|
|
content
|
|
content "Script:" "$(basename $0)"
|
|
content "Version:" "${SCRIPTVERSION}"
|
|
content
|
|
content "This script is an example."
|
|
content
|
|
box
|
|
|
|
uws@tux>./textbox.sh
|
|
********************************************************************
|
|
* *
|
|
* Script: textbox.sh *
|
|
* Version: 13.01.07 *
|
|
* *
|
|
* This script is an example. *
|
|
* *
|
|
********************************************************************
|
|
\end{lstlisting}
|
|
\newpage
|
|
\listBash
|
|
\begin{lstlisting}[captionpos=b, caption=Beispiel Color mit Function]
|
|
uws@tux>cat FuncColorText.sh
|
|
#!/usr/bin/env bash
|
|
|
|
err() {
|
|
RESET="\e[1;0m"
|
|
FETT="\e[1;1m"
|
|
ROT="$FETT\e[1;31m"
|
|
local txt=$1; shift
|
|
printf "${ROT}==>${RESET}${FETT} ${txt}${RESET}\n" "$@" >&2
|
|
}
|
|
|
|
msg() {
|
|
RESET="\e[1;0m"
|
|
FETT="\e[1;1m"
|
|
GRUEN="$FETT\e[1;32m"
|
|
local txt=$1; shift
|
|
printf "${GRUEN}==>${RESET}${FETT} ${txt}${RESET}\ n" "$@" >&2
|
|
}
|
|
|
|
msg "File found in folder."
|
|
err "No file found."
|
|
\end{lstlisting}
|
|
\end{justify}
|