diff --git a/5.html b/5.html
index 03bfec7..c1cf992 100644
--- a/5.html
+++ b/5.html
@@ -61,7 +61,6 @@
https://wiki.ubuntuusers.de/Shell/Bash-Skripting-Guide_für_Anfänger/#Quoting
- script kontrolle ( strg-z etc )
@@ -84,7 +83,9 @@ X=20 #variablen sind Case Sensitive
$y= #NULL variable
echo "x = $x"
echo "X = $X"
-echo "y = $y"
+echo "y = $y"
+unset x #variable löschen
+echo $x
@@ -105,58 +106,225 @@ echo $(( 2#101011 )) # Base conversion, not a comment.
- Quotes
-
-
- - Double Quotes: " " -Anything enclose in double quotes removed meaning of that characters (except \ and $).
- - Single quotes: ' ' - Enclosed in single quotes remains unchanged.
- - Back quote: ` ` - To execute command
+ Quoting
+
+ " "
(Anführungszeichen) Alles zwischen diesen Zeichen ist buchstabengetreu zu interpretieren. Ausnahmen : $ ` " \
+ ' '
(Ticks) Alles zwischen diesen Zeichen wird wörtlich genommen, mit Ausnahme eines weiteren '
.
+ \
(Backslash) Das Zeichen nach einem \
wird wörtlich genommen. Anwendung z. B. innerhalb von " ", um ", $ und ` zu entwerten.
+ ` `
(Backticks) Alles innerhalb wird als Kommando interpretiert.
+
+$ 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
+
+
+
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.
+
Input - Output redirection
-
- - > : output in Datei. Best. Datei wird überschrieben!
- - >> : output an Datei anhängen.
- - < : Kommando Input aus Datei lesen
-
#!/bin/bash
-echo "ls > file_list"
+# > : output in Datei. Best. Datei wird überschrieben!
ls > file_list
-
-echo "ls -la >> file_list"
+
+# >> : output an Datei anhängen.
ls -la >> file_list
-echo "cat < file_list"
+# < : Kommando Input aus Datei lesen
cat < file_list
-
-
- - arithmetik
+ Man kann Kommandos auch verkettten:
+
+
+
+ Kommando1; Kommando2
+ |
+ fühert die Kommandos hintereinander aus
+ |
+
+
+ Kommando1 && Kommando2
+ |
+ führt Kommando2 aus, wenn kommando1 erfolgreich war
+ |
+
+
+ Kommando1 || Kommando2
+ |
+ führt Kommando2 aus, wenn kommando1 NICHT erfolgreich war
+ |
+
+
+ Kommado &
+ |
+ Führt Kommando im Hintergrund aus
+ |
+
+
+ Kommando1 & Kommando2
+ |
+ startet Kommando1 im Hintergrund, Kommando2 im Vordergrund
+ |
+
+
+ ( Kommando1; Kommando2 )
+ |
+ Führt die beiden K. nacheinander in einer Subshell aus
+ |
+
+
+
- let "m = 4 * 1024";echo $m
+ sudo apt-get update && sudo apt-get upgrade -y
- let "m += 15"
- let "m -= 3"
- let "m /= 5"
- let "m %= 10"
- let "m++"
- let "m--"
+tar cf archiv.tar && rm *.doc || echo "fehler"
+
- let "k = (m < 9) ? 0 : 1"
- condition ? value-if-true : value-if-false
+
+ Aufgabe: Erstellt ein script, das den Inhalt eures home in eine Variable liste
schreibt, und gebt den Inhalt dieser Variablen in eine Textdatei liste.txt
aus.
+ Hinweis: ls , tee
+ #!/bin/bash
+OUTFILE="liste.txt"
- Floating Poin:
- echo "32.0 + 1.4" | bc
+liste=`ls | tee $OUTFILE `
- echo `expr $m + 18`
- m=`expr $m + 18`
+echo $liste
- (( m *= 4 ))
+cat $OUTFILE
+
+
+
+
+
+ exit status
+ exit 0
+ heisst : alles gut gelaufen
+ exit 1
+ heisst : kommando fehlgeschlagen
+
+ der exit code in scripten kann beliebig gesetzt werden
+
Standard: exit 0 -> alles fein
+
+
+
+ Funktionen
+ #!/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
+
+
+
+ #!/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: $?"
+
+
+ #!/bin/bash
+tar -czf myhome_directory.tar.gz /home/$USER
+mkdir archiv
+mv myhome_directory.tar.gz archiv/
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Integer Berechnungen
+let "m = 4 * 1024";echo $m
+
+let "m += 15"
+let "m -= 3"
+let "m /= 5"
+let "m %= 10"
+let "m++"
+let "m--"
+
+
+let "k = (m < 9) ? 0 : 1"
+condition ? value-if-true : value-if-false
+
+
+Floating Poin:
+echo "32.0 + 1.4" | bc
+
+echo `expr $m + 18`
+m=`expr $m + 18`
+
+(( m *= 4 ))
+
@@ -164,17 +332,7 @@ cat < file_list
-
- Die 5 Level eines Vim Magiers
-
- - Level 0: nichts über vim wissen
-
- Level 1: vim basics kennen
-
- Level 2: den visual mode kennen
-
- Level 3: diverse „motions“ kennen
-
- Level 4: den visual mode nicht brauchen
-
- https://danielmiessler.com/study/vim/
-
+
diff --git a/beispiele/4/mysystem.sh b/beispiele/4/mysystem.sh
old mode 100755
new mode 100644
diff --git a/beispiele/5/01-vars.sh b/beispiele/5/01-vars.sh
old mode 100644
new mode 100755
index ec5754d..898c1eb
--- a/beispiele/5/01-vars.sh
+++ b/beispiele/5/01-vars.sh
@@ -5,4 +5,8 @@ X=20 #variables are case sensitive
$y= #NULL variable
echo "x = $x"
echo "X = $X"
-echo "y = $y"
\ No newline at end of file
+echo "y = $y"
+
+unset x
+echo "x = $x"
+
diff --git a/beispiele/5/02-comments.sh b/beispiele/5/02-comments.sh
old mode 100644
new mode 100755
diff --git a/beispiele/5/03-quoting.sh b/beispiele/5/03-quoting.sh
new file mode 100755
index 0000000..d57f3fa
--- /dev/null
+++ b/beispiele/5/03-quoting.sh
@@ -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"
diff --git a/beispiele/5/04-function-exitcode.sh b/beispiele/5/04-function-exitcode.sh
new file mode 100644
index 0000000..5c16d11
--- /dev/null
+++ b/beispiele/5/04-function-exitcode.sh
@@ -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: $?"
+
diff --git a/beispiele/5/04-function.sh b/beispiele/5/04-function.sh
new file mode 100755
index 0000000..dd925ac
--- /dev/null
+++ b/beispiele/5/04-function.sh
@@ -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
\ No newline at end of file
diff --git a/beispiele/5/recursive-func.sh b/beispiele/5/05-recursive-func.sh
old mode 100644
new mode 100755
similarity index 100%
rename from beispiele/5/recursive-func.sh
rename to beispiele/5/05-recursive-func.sh
diff --git a/beispiele/5/06-dialog.sh b/beispiele/5/06-dialog.sh
new file mode 100755
index 0000000..2db0847
--- /dev/null
+++ b/beispiele/5/06-dialog.sh
@@ -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
\ No newline at end of file
diff --git a/beispiele/5/07-select-menu.sh b/beispiele/5/07-select-menu.sh
new file mode 100644
index 0000000..cc6673a
--- /dev/null
+++ b/beispiele/5/07-select-menu.sh
@@ -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
\ No newline at end of file
diff --git a/beispiele/5/while-menu.sh b/beispiele/5/08-while-menu.sh
old mode 100644
new mode 100755
similarity index 100%
rename from beispiele/5/while-menu.sh
rename to beispiele/5/08-while-menu.sh
diff --git a/beispiele/5/09-backup.sh b/beispiele/5/09-backup.sh
new file mode 100644
index 0000000..5b4405c
--- /dev/null
+++ b/beispiele/5/09-backup.sh
@@ -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
diff --git a/beispiele/5/aufgabe1.sh b/beispiele/5/aufgabe1.sh
new file mode 100755
index 0000000..755aadf
--- /dev/null
+++ b/beispiele/5/aufgabe1.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+OUTFILE="liste.txt"
+liste=`ls | tee $OUTFILE `
+echo $liste
+
+cat $OUTFILE
\ No newline at end of file