5 WIP
This commit is contained in:
parent
87205c16f0
commit
fdfe2c362f
220
5.html
220
5.html
@ -61,7 +61,6 @@
|
|||||||
|
|
||||||
<p>http://programmingexamples.wikidot.com/bash-scripting#toc24
|
<p>http://programmingexamples.wikidot.com/bash-scripting#toc24
|
||||||
|
|
||||||
<p>https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/#Quoting
|
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
- script kontrolle ( strg-z etc )
|
- script kontrolle ( strg-z etc )
|
||||||
@ -84,7 +83,9 @@ X=20 #variablen sind Case Sensitive
|
|||||||
$y= #NULL variable
|
$y= #NULL variable
|
||||||
echo "x = $x"
|
echo "x = $x"
|
||||||
echo "X = $X"
|
echo "X = $X"
|
||||||
echo "y = $y"</code></pre>
|
echo "y = $y"
|
||||||
|
unset x #variable löschen
|
||||||
|
echo $x</code></pre>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
@ -105,38 +106,203 @@ echo $(( 2#101011 )) # Base conversion, not a comment.
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h3>Quotes</h3>
|
<h3>Quoting</h3>
|
||||||
|
<ul style="font-size: .8em ">
|
||||||
<ul>
|
<li class="fragment "><code>" "</code> (Anführungszeichen) Alles zwischen diesen Zeichen ist buchstabengetreu zu interpretieren. Ausnahmen :<code> $ ` " \ </code></li>
|
||||||
<li class="fragment ">Double Quotes: " " -Anything enclose in double quotes removed meaning of that characters (except \ and $).</li>
|
<li class="fragment "><code>' ' </code>(Ticks) Alles zwischen diesen Zeichen wird wörtlich genommen, mit Ausnahme eines weiteren <code>'</code>.</li>
|
||||||
<li class="fragment ">Single quotes: ' ' - Enclosed in single quotes remains unchanged.</li>
|
<li class="fragment "><code>\</code> (Backslash) Das Zeichen nach einem <code>\</code> wird wörtlich genommen. Anwendung z. B. innerhalb von " ", um ", $ und ` zu entwerten.</li>
|
||||||
<li class="fragment ">Back quote: ` ` - To execute command</li>
|
<li class="fragment "><code>` `</code> (Backticks) Alles innerhalb wird als Kommando interpretiert.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<pre><code>$ echo 'Ticks "schützen" Anführungszeichen'
|
||||||
|
Ticks "schützen" Anführungszeichen
|
||||||
|
|
||||||
|
$ echo "Ist dies ein \"Sonderfall\"?"
|
||||||
|
Ist dies ein "Sonderfall"?
|
||||||
|
|
||||||
|
$ echo "Sie haben `ls | wc -l` Dateien in `pwd`"
|
||||||
|
Sie haben 43 Dateien in /home/dany
|
||||||
|
|
||||||
|
$ echo "Der Wert von \$x ist $x"
|
||||||
|
Der Wert von $x ist 100
|
||||||
|
|
||||||
|
# Maskierung der Leerstelle mit \
|
||||||
|
message="hallo Welt"
|
||||||
|
message=hello\ Welt
|
||||||
|
</code></pre>
|
||||||
|
</section>
|
||||||
|
<section><pre><code>echo 'So sprach'"'"'s und ging ohne einen Backslash (\) weiter.'
|
||||||
|
└────┬────┘└┬┘└─────────────────────┬─────────────────────┘
|
||||||
|
│ │ │
|
||||||
|
│ │ └ Dritter Bereich: Wieder
|
||||||
|
│ │ von ' umschlossen, der
|
||||||
|
│ │ Backlash verliert
|
||||||
|
│ │ seine Sonderbedeutung.
|
||||||
|
│ │
|
||||||
|
│ └ Zweiter Bereich: Von " umschlossen, enthält ein
|
||||||
|
│ einzelnes '.
|
||||||
|
│
|
||||||
|
└ Erster Bereich: Von ' umschlossen.</code></pre></section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h3>Input - Output redirection</h3>
|
<h3>Input - Output redirection</h3>
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li class="fragment "> > : output in Datei. Best. Datei wird überschrieben!</li>
|
|
||||||
<li class="fragment "> >> : output an Datei anhängen.</li>
|
|
||||||
<li class="fragment "> < : Kommando Input aus Datei lesen</li>
|
|
||||||
</ul>
|
|
||||||
<pre><code>#!/bin/bash
|
<pre><code>#!/bin/bash
|
||||||
echo "ls > file_list"
|
# > : output in Datei. Best. Datei wird überschrieben!
|
||||||
ls > file_list
|
ls > file_list
|
||||||
|
|
||||||
echo "ls -la >> file_list"
|
# >> : output an Datei anhängen.
|
||||||
ls -la >> file_list
|
ls -la >> file_list
|
||||||
|
|
||||||
echo "cat < file_list"
|
# < : Kommando Input aus Datei lesen
|
||||||
cat < file_list</code></pre>
|
cat < file_list</code></pre>
|
||||||
|
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
- arithmetik
|
Man kann Kommandos auch verkettten:
|
||||||
|
<table style="font-size: .5em">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td >Kommando1; Kommando2
|
||||||
|
</td>
|
||||||
|
<td >fühert die Kommandos hintereinander aus
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >Kommando1 && Kommando2
|
||||||
|
</td>
|
||||||
|
<td >führt Kommando2 aus, wenn kommando1 erfolgreich war
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >Kommando1 || Kommando2
|
||||||
|
</td>
|
||||||
|
<td >führt Kommando2 aus, wenn kommando1 NICHT erfolgreich war
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >Kommado &
|
||||||
|
</td>
|
||||||
|
<td >Führt Kommando im Hintergrund aus
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >Kommando1 & Kommando2
|
||||||
|
</td>
|
||||||
|
<td >startet Kommando1 im Hintergrund, Kommando2 im Vordergrund
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td >( Kommando1; Kommando2 )
|
||||||
|
</td>
|
||||||
|
<td >Führt die beiden K. nacheinander in einer Subshell aus
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<pre class="fragment"><code>sudo apt-get update && sudo apt-get upgrade -y
|
||||||
|
|
||||||
|
tar cf archiv.tar && rm *.doc || echo "fehler"</code></pre>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<span style="color: orange">Aufgabe:</span> Erstellt ein script, das den Inhalt eures home in eine Variable <code>liste</code> schreibt, und gebt den Inhalt dieser Variablen in eine Textdatei <code>liste.txt</code> aus.<br />
|
||||||
|
Hinweis: ls , tee
|
||||||
|
<pre class="fragment"><code>#!/bin/bash
|
||||||
|
OUTFILE="liste.txt"
|
||||||
|
|
||||||
|
liste=`ls | tee $OUTFILE `
|
||||||
|
|
||||||
|
echo $liste
|
||||||
|
|
||||||
|
cat $OUTFILE
|
||||||
|
</code></pre>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h3>exit status</h3>
|
||||||
|
<pre><code>exit 0</code></pre>
|
||||||
|
heisst : alles gut gelaufen
|
||||||
|
<pre><code>exit 1</code></pre>
|
||||||
|
heisst : kommando fehlgeschlagen
|
||||||
|
|
||||||
|
<p> der exit code in scripten kann beliebig gesetzt werden
|
||||||
|
<p>Standard: exit 0 -> alles fein
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h3>Funktionen</h3>
|
||||||
|
<pre><code>#!/bin/bash
|
||||||
|
|
||||||
|
#Funktions Deklaration:
|
||||||
|
count () {
|
||||||
|
ls | wc -l
|
||||||
|
|
||||||
|
# ls: Liste aller Objekte im Verzeichnis
|
||||||
|
# wc: Word-Count; mit Attribut -l werden Zeilen gezählt
|
||||||
|
# in Verbindung mit ls werden also die (nicht versteckten) Objekte gezählt
|
||||||
|
}
|
||||||
|
|
||||||
|
count # Aufruf der Funktion
|
||||||
|
</code></pre>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<pre><code>#!/bin/bash
|
||||||
|
count2 () {
|
||||||
|
# überprüfen, ob der erste Parameter ein Verzeichnis ist
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
ls $1 | wc -l
|
||||||
|
exit 0 # alles OK
|
||||||
|
else
|
||||||
|
echo "Ungültiges Verzeichnis: $1"
|
||||||
|
exit 1 # Fehler
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
count2 "/gibt/es/garnicht" # Aufrufe der Funktion count2
|
||||||
|
echo "Status: $?"
|
||||||
|
|
||||||
|
count2 "/etc"
|
||||||
|
echo "Status: $?"</code></pre>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<div class="fragment"><pre><code>#!/bin/bash
|
||||||
|
tar -czf myhome_directory.tar.gz /home/$USER
|
||||||
|
mkdir archiv
|
||||||
|
mv myhome_directory.tar.gz archiv/
|
||||||
|
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<pre><code>
|
||||||
|
Integer Berechnungen
|
||||||
let "m = 4 * 1024";echo $m
|
let "m = 4 * 1024";echo $m
|
||||||
|
|
||||||
let "m += 15"
|
let "m += 15"
|
||||||
@ -145,10 +311,12 @@ cat < file_list</code></pre>
|
|||||||
let "m %= 10"
|
let "m %= 10"
|
||||||
let "m++"
|
let "m++"
|
||||||
let "m--"
|
let "m--"
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
let "k = (m < 9) ? 0 : 1"
|
let "k = (m < 9) ? 0 : 1"
|
||||||
condition ? value-if-true : value-if-false
|
condition ? value-if-true : value-if-false
|
||||||
|
|
||||||
|
<pre><code>
|
||||||
Floating Poin:
|
Floating Poin:
|
||||||
echo "32.0 + 1.4" | bc
|
echo "32.0 + 1.4" | bc
|
||||||
|
|
||||||
@ -156,7 +324,7 @@ cat < file_list</code></pre>
|
|||||||
m=`expr $m + 18`
|
m=`expr $m + 18`
|
||||||
|
|
||||||
(( m *= 4 ))
|
(( m *= 4 ))
|
||||||
|
</code></pre>
|
||||||
</section>
|
</section>
|
||||||
<section data-transition="slide" data-background="#4d7e65" data-background-transition="zoom">
|
<section data-transition="slide" data-background="#4d7e65" data-background-transition="zoom">
|
||||||
|
|
||||||
@ -164,17 +332,7 @@ cat < file_list</code></pre>
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<h3>Die 5 Level eines Vim Magiers</h3>
|
|
||||||
<ul>
|
|
||||||
<li>Level 0: nichts über vim wissen
|
|
||||||
<li>Level 1: vim basics kennen
|
|
||||||
<li>Level 2: den visual mode kennen
|
|
||||||
<li>Level 3: diverse „motions“ kennen
|
|
||||||
<li>Level 4: den visual mode nicht brauchen
|
|
||||||
</ul>
|
|
||||||
<p>https://danielmiessler.com/study/vim/
|
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
0
beispiele/4/mysystem.sh
Executable file → Normal file
0
beispiele/4/mysystem.sh
Executable file → Normal file
4
beispiele/5/01-vars.sh
Normal file → Executable file
4
beispiele/5/01-vars.sh
Normal file → Executable file
@ -6,3 +6,7 @@ $y= #NULL variable
|
|||||||
echo "x = $x"
|
echo "x = $x"
|
||||||
echo "X = $X"
|
echo "X = $X"
|
||||||
echo "y = $y"
|
echo "y = $y"
|
||||||
|
|
||||||
|
unset x
|
||||||
|
echo "x = $x"
|
||||||
|
|
||||||
|
0
beispiele/5/02-comments.sh
Normal file → Executable file
0
beispiele/5/02-comments.sh
Normal file → Executable file
8
beispiele/5/03-quoting.sh
Executable file
8
beispiele/5/03-quoting.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
echo 'Ticks "schützen" Anführungszeichen'
|
||||||
|
|
||||||
|
echo "Ist dies ein \"Sonderfall\"?"
|
||||||
|
|
||||||
|
echo "Sie haben `ls | wc -l` Dateien in `pwd`"
|
||||||
|
|
||||||
|
echo "Der Wert von \$x ist $x"
|
16
beispiele/5/04-function-exitcode.sh
Normal file
16
beispiele/5/04-function-exitcode.sh
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
count2 () {
|
||||||
|
if [ -d "$1" ]; then # überprüfen, ob der erste Parameter ein Verzeichnis ist
|
||||||
|
ls $1 | wc -l # wie oben
|
||||||
|
exit 0 # alles OK
|
||||||
|
else
|
||||||
|
echo "Ungültiges Verzeichnis: $1"
|
||||||
|
exit 1 # Fehler
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
count2 "/gibt/es/garnicht" # Aufrufe der Funktion count2
|
||||||
|
echo "Status: $?"
|
||||||
|
|
||||||
|
count2 "/etc"
|
||||||
|
echo "Status: $?"
|
||||||
|
|
13
beispiele/5/04-function.sh
Executable file
13
beispiele/5/04-function.sh
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
fatal() {
|
||||||
|
msg=$1
|
||||||
|
echo "Fatal: $msg"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -d /tmp ] || fatal "Verzeichnis /tmp existiert nicht"
|
||||||
|
[ -w /tmp ] || fatal "Verzeichnis /tmp nicht schreibbar"
|
||||||
|
|
||||||
|
TMP=/tmp/mydir
|
||||||
|
[ -d $TMP ] || mkdir $TMP # tmp-Verz. erzeugen, wenn noch nicht vorhanden
|
0
beispiele/5/recursive-func.sh → beispiele/5/05-recursive-func.sh
Normal file → Executable file
0
beispiele/5/recursive-func.sh → beispiele/5/05-recursive-func.sh
Normal file → Executable file
9
beispiele/5/06-dialog.sh
Executable file
9
beispiele/5/06-dialog.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Set PS3 prompt
|
||||||
|
PS3="Enter the space shuttle to get more information : "
|
||||||
|
|
||||||
|
# set shuttle list
|
||||||
|
select shuttle in columbia endeavour challenger discovery atlantis enterprise pathfinder
|
||||||
|
do
|
||||||
|
echo "$shuttle selected"
|
||||||
|
done
|
48
beispiele/5/07-select-menu.sh
Normal file
48
beispiele/5/07-select-menu.sh
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Set PS3 prompt
|
||||||
|
PS3="Enter the space shuttle to get more information : "
|
||||||
|
|
||||||
|
# set shuttle list
|
||||||
|
select shuttle in columbia endeavour challenger discovery atlantis enterprise pathfinder
|
||||||
|
do
|
||||||
|
case $shuttle in
|
||||||
|
columbia)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Space Shuttle Columbia was the first spaceworthy space shuttle in NASA's orbital fleet."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
endeavour)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Space Shuttle Endeavour is one of three currently operational orbiters in the Space Shuttle."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
challenger)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Space Shuttle Challenger was NASA's second Space Shuttle orbiter to be put into service."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
discovery)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Discovery became the third operational orbiter, and is now the oldest one in service."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
atlantis)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Atlantis was the fourth operational shuttle built."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
enterprise)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Space Shuttle Enterprise was the first Space Shuttle orbiter."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
pathfinder)
|
||||||
|
echo "--------------"
|
||||||
|
echo "Space Shuttle Orbiter Pathfinder is a Space Shuttle simulator made of steel and wood."
|
||||||
|
echo "--------------"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Error: Please try again (select 1..7)!"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
0
beispiele/5/while-menu.sh → beispiele/5/08-while-menu.sh
Normal file → Executable file
0
beispiele/5/while-menu.sh → beispiele/5/08-while-menu.sh
Normal file → Executable file
36
beispiele/5/09-backup.sh
Normal file
36
beispiele/5/09-backup.sh
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Get date in dd-mm-yyyy format
|
||||||
|
NOW="$(date +"%d-%m-%Y")"
|
||||||
|
|
||||||
|
function file_backup {
|
||||||
|
wpbackupfile="wordpress-backup-$NOW.tar.gz"
|
||||||
|
oxidbackupfile="oxid-back-$NOW.tar.gz"
|
||||||
|
|
||||||
|
echo 'WP Files Backup --- building tar File...'
|
||||||
|
tar -czf $wpbackupfile /var/html/www/rvv/wp*
|
||||||
|
echo '+DONE'
|
||||||
|
|
||||||
|
echo 'oxid Files Backup --- building tar File...'
|
||||||
|
tar -czf $oxidbackupfile /var/html/www/rvv/shop
|
||||||
|
echo '+DONE'
|
||||||
|
}
|
||||||
|
|
||||||
|
function oxid_db_backup {
|
||||||
|
host=localhost
|
||||||
|
user=rvv
|
||||||
|
pass=xxxxxxxxx
|
||||||
|
db=webshop
|
||||||
|
|
||||||
|
echo 'oxid DB Export ------> '
|
||||||
|
mysqldump --opt --add-drop-table -h$host -u$user -p$pass $db | gzip > oxid-db-$NOW.sql.gz
|
||||||
|
}
|
||||||
|
|
||||||
|
backupdir=~/backup
|
||||||
|
cd ~ ; mkdir $backupdir ; cd $backupdir
|
||||||
|
|
||||||
|
oxid_db_backup
|
||||||
|
file_backup
|
||||||
|
|
||||||
|
# delete old backups
|
||||||
|
find /home/dany/backups -mtime +10 -type f -delete
|
6
beispiele/5/aufgabe1.sh
Executable file
6
beispiele/5/aufgabe1.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
OUTFILE="liste.txt"
|
||||||
|
liste=`ls | tee $OUTFILE `
|
||||||
|
echo $liste
|
||||||
|
|
||||||
|
cat $OUTFILE
|
Loading…
Reference in New Issue
Block a user