# Bash scripting basics Kommt immer zu begin eines neuen Scripts ``` #!/bin/bash ``` Berechtigung um ausgeführt zu werden ``` chmod +x FILENAME ``` ## Description Numeric Comparison String Comparison ``` Shell comparison example: [ 100 -eq 50 ]; echo $? [ "GNU" = "UNIX" ]; echo $? less than -lt < greater than -gt > equal -eq = not equal -ne != less or equal -le N/A greater or equal -ge N/A boolean true=0 false=1 ``` ``` Operator Description ! EXPRESSION The EXPRESSION is false. -n STRING The length of STRING is greater than zero. -z STRING The lengh of STRING is zero (ie it is empty). [ -a FILE ] True if FILE exists. [ -b FILE ] True if FILE exists and is a block-special file. [ -c FILE ] True if FILE exists and is a character-special file. [ -d FILE ] True if FILE exists and is a directory. [ -e FILE ] True if FILE exists. [ -f FILE ] True if FILE exists and is a regular file. [ -g FILE ] True if FILE exists and its SGID bit is set. [ -h FILE ] True if FILE exists and is a symbolic link. [ -k FILE ] True if FILE exists and its sticky bit is set. [ -p FILE ] True if FILE exists and is a named pipe (FIFO). [ -r FILE ] True if FILE exists and is readable. [ -s FILE ] True if FILE exists and has a size greater than zero. [ -t FD ] True if file descriptor FD is open and refers to a terminal. [ -u FILE ] True if FILE exists and its SUID (set user ID) bit is set. [ -w FILE ] True if FILE exists and is writable. [ -x FILE ] True if FILE exists and is executable. [ -O FILE ] True if FILE exists and is owned by the effective user ID. [ -G FILE ] True if FILE exists and is owned by the effective group ID. [ -L FILE ] True if FILE exists and is a symbolic link. [ -N FILE ] True if FILE exists and has been modified since it was last read. [ -S FILE ] True if FILE exists and is a socket. STRING1 = STRING2 STRING1 is equal to STRING2 STRING1 != STRING2 STRING1 is not equal to STRING2 INTEGER1 -eq INTEGER2 INTEGER1 is numerically equal to INTEGER2 INTEGER1 -gt INTEGER2 INTEGER1 is numerically greater than INTEGER2 INTEGER1 -lt INTEGER2 INTEGER1 is numerically less than INTEGER2 ``` ## Example if then else in bash ``` #!/bin/bash num_a=400 num_b=200 if [ $num_a -lt $num_b ]; then echo "$num_a is less than $num_b!" else echo "$num_a is greater than $num_b!" fi ``` ## IF ELSE && CASE ``` if Perform a set of commands if a test is true. else If the test is not true then perform a different set of commands. elif If the previous test returned false then try this one. && Perform the and operation. || Perform the or operation. case Choose a set of commands to execute depending on a string matching a particular pattern. fi End of if ``` ## Variabeln ``` name='Someone' -Nur Text kann man in einem String speichern. username=$(whoami) -funktionen werden mit $() angegeben day=$(date +%A) -parameter können ohne Probleme in die Klammer schreiben. ``` ## Command Exec der befehl kommt ohne syntax einfach auf eine leere zeile z.b. ``` fortune cowsay hallo ``` ich kann die beiden commands aber auch zusammensetzen ``` fortune | cowsay ``` ## stderr stdout The difference between stdout and stderr output is an essential concept as it allows us to a threat, that is, to redirect each output separately. The > notation is used to redirect stdout to a file whereas 2> notation is used to redirect stderr and &> is used to redirect both stdout and stderr. The cat command is used to display a content of any given file