From cd549e102a819a1b6b632f970c36806bb1712308 Mon Sep 17 00:00:00 2001 From: Daniel Schubert Date: Wed, 9 Jan 2019 11:55:18 +0100 Subject: [PATCH] 5 WIP --- 5.html | 248 ++++++++++++++---- beispiele/4/mysystem.sh | 0 beispiele/5/01-vars.sh | 6 +- beispiele/5/02-comments.sh | 0 beispiele/5/03-quoting.sh | 8 + beispiele/5/04-function-exitcode.sh | 16 ++ beispiele/5/04-function.sh | 13 + ...recursive-func.sh => 05-recursive-func.sh} | 0 beispiele/5/06-dialog.sh | 9 + beispiele/5/07-select-menu.sh | 48 ++++ .../5/{while-menu.sh => 08-while-menu.sh} | 0 beispiele/5/09-backup.sh | 36 +++ beispiele/5/aufgabe1.sh | 6 + 13 files changed, 344 insertions(+), 46 deletions(-) mode change 100755 => 100644 beispiele/4/mysystem.sh mode change 100644 => 100755 beispiele/5/01-vars.sh mode change 100644 => 100755 beispiele/5/02-comments.sh create mode 100755 beispiele/5/03-quoting.sh create mode 100644 beispiele/5/04-function-exitcode.sh create mode 100755 beispiele/5/04-function.sh rename beispiele/5/{recursive-func.sh => 05-recursive-func.sh} (100%) mode change 100644 => 100755 create mode 100755 beispiele/5/06-dialog.sh create mode 100644 beispiele/5/07-select-menu.sh rename beispiele/5/{while-menu.sh => 08-while-menu.sh} (100%) mode change 100644 => 100755 create mode 100644 beispiele/5/09-backup.sh create mode 100755 beispiele/5/aufgabe1.sh diff --git a/5.html b/5.html index 03bfec7..c1cf992 100644 --- a/5.html +++ b/5.html @@ -61,7 +61,6 @@

http://programmingexamples.wikidot.com/bash-scripting#toc24 -

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..51e609a --- /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 ~/www/rvv/wp* + echo '+DONE' + + echo 'oxid Files Backup --- building tar File...' + tar -czf $oxidbackupfile ~/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