| Line 1: |
Line 1: |
| | '''BASH Scripting''' | | '''BASH Scripting''' |
| − | == Hello World == | + | ==Hello World== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 7: |
Line 7: |
| | </source> | | </source> |
| | | | |
| − | == Variables == | + | ==Variables== |
| − | === Local Variables === | + | ===Local Variables=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 20: |
Line 20: |
| | echo $HELLO | | echo $HELLO |
| | </source> | | </source> |
| − | === Boolean === | + | ===Boolean=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 30: |
Line 30: |
| | </source> | | </source> |
| | | | |
| − | == Print == | + | ==Print== |
| − | === Print to stderr === | + | ===Print to stderr=== |
| | f_pinta_error () { | | f_pinta_error () { |
| | v_TIMESTAMP=$(date +${v_FORMATO_TIMESTAMP}) | | v_TIMESTAMP=$(date +${v_FORMATO_TIMESTAMP}) |
| Line 37: |
Line 37: |
| | } | | } |
| | | | |
| − | == Strings == | + | ==Strings== |
| | | | |
| − | == Loops == | + | ==Loops== |
| − | === While === | + | ===While=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 50: |
Line 50: |
| | </source> | | </source> |
| | | | |
| − | === For === | + | ===For=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 63: |
Line 63: |
| | </source> | | </source> |
| | | | |
| − | === C-like for === | + | ===C-like for=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 71: |
Line 71: |
| | done | | done |
| | </source> | | </source> |
| − | === Loop files === | + | ===Loop files=== |
| | while read p; do echo $p|underscore pretty ; done < /tenkaichi/boo/done/krilin_2017-12-21T12:45:29.544997.jl.boo | | while read p; do echo $p|underscore pretty ; done < /tenkaichi/boo/done/krilin_2017-12-21T12:45:29.544997.jl.boo |
| | | | |
| − | === Loop files in directory === | + | ===Loop files in directory=== |
| | With paths: | | With paths: |
| − | <source lang="bash">for filename in /usr/bin/*; do echo $filename; done</source>
| + | <source lang="bash">for filename in /usr/bin/*; do echo $filename; done</source> |
| | Without path: | | Without path: |
| − | <source lang="bash">for i in $(ls /usr/bin);do echo $i; done;</source>
| + | <source lang="bash">for i in $(ls /usr/bin);do echo $i; done;</source> |
| | | | |
| − | === Until === | + | ===Until=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 90: |
Line 90: |
| | </source> | | </source> |
| | | | |
| − | == Conditional == | + | ==Conditional== |
| − | === if === | + | ===if=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 103: |
Line 103: |
| | </source> | | </source> |
| | | | |
| − | === case === | + | ===case=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 138: |
Line 138: |
| | </source> | | </source> |
| | | | |
| − | == User Input == | + | ==User Input== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 150: |
Line 150: |
| | done | | done |
| | </source> | | </source> |
| − | === Password prompt === | + | ===Password prompt=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | read -s -p "Password: " PASSWORD | | read -s -p "Password: " PASSWORD |
| | </source> | | </source> |
| | | | |
| − | == Arrays == | + | ==Arrays== |
| | <source lang="bash"> | | <source lang="bash"> |
| | ARRAY=(one two three) | | ARRAY=(one two three) |
| Line 174: |
Line 174: |
| | </source> | | </source> |
| | | | |
| − | == Functions == | + | ==Functions== |
| | <source lang="bash"> | | <source lang="bash"> |
| | function quit { | | function quit { |
| Line 192: |
Line 192: |
| | fun1 || fun2 will only run fun2 if fun1 returns a 0 value<br /> | | fun1 || fun2 will only run fun2 if fun1 returns a 0 value<br /> |
| | | | |
| − | == Redirections == | + | ==Redirections== |
| − | === stdout 2 file === | + | ===stdout 2 file=== |
| | ls -l > ls-l.txt | | ls -l > ls-l.txt |
| − | === stderr 2 file === | + | ===stderr 2 file=== |
| | grep da * 2> grep-errors.txt | | grep da * 2> grep-errors.txt |
| − | === stdout 2 stderr === | + | ===stdout 2 stderr=== |
| | grep da * 1>&2 | | grep da * 1>&2 |
| − | === stderr 2 stdout === | + | ===stderr 2 stdout=== |
| | grep * 2>&1 | | grep * 2>&1 |
| − | === stderr and stdout 2 file === | + | ===stderr and stdout 2 file=== |
| | rm -f $(find / -name core) &> /dev/null | | rm -f $(find / -name core) &> /dev/null |
| − | == extras == | + | ==Extras== |
| − | === Backup Hard Drive === | + | |
| − | <source lang="bash">#!/bin/bash
| + | ===Killswitch When ssh user logs in=== |
| − | USAGE="./$(basename ${0}) UUID output.iso" | + | <syntaxhighlight lang="bash"> |
| | + | #!/bin/bash |
| | + | ME=10.0.253.131 |
| | + | |
| | + | while true; do |
| | + | OTHER=$( who | grep -v tmux | grep -v ${ME} ) |
| | + | if [ -z "${OTHER}" ]; then |
| | + | echo "No one" |
| | + | else |
| | + | tmux kill-session -t test |
| | + | fi |
| | + | sleep 5 |
| | + | done |
| | + | </syntaxhighlight><br /> |
| | + | ===Set files and folder permissions=== |
| | + | <syntaxhighlight lang="bash"> |
| | + | #!/bin/sh |
| | + | # syntax: setperm.s destdir |
| | + | # |
| | + | |
| | + | destdir=/var/www/rrahome |
| | + | |
| | + | dirmode=0770 |
| | + | filemode=0660 |
| | + | |
| | + | find $destdir -type f -exec chmod ${filemode} {} \; |
| | + | find $destdir -type d -exec chmod ${dirmode} {} \; |
| | + | </syntaxhighlight> |
| | + | |
| | + | ===Backup Hard Drive=== |
| | + | <source lang="bash">#!/bin/bash |
| | + | USAGE="./$(basename ${0}) UUID output_filename" |
| | + | BACKUP_ROOT=/mnt/backup |
| | | | |
| | if [ -z "${1}" ]; then | | if [ -z "${1}" ]; then |
| Line 217: |
Line 249: |
| | fi | | fi |
| | | | |
| − | BACKUP_ROOT=/mnt/backup
| |
| | HD=$(blkid | grep $1 | awk -F : '{print $1}') | | HD=$(blkid | grep $1 | awk -F : '{print $1}') |
| | ISO=${BACKUP_ROOT}/$(hostname)/$(date '+%Y/%m')/$2.iso | | ISO=${BACKUP_ROOT}/$(hostname)/$(date '+%Y/%m')/$2.iso |
| | + | |
| | dd if=${HD} of=${ISO} bs=1M</source> | | dd if=${HD} of=${ISO} bs=1M</source> |
| | | | |
| − | === Ping IP range === | + | ===Extract date from string=== |
| − | <source lang="bash">#!/bin/bash
| + | <syntaxhighlight lang="bash"> |
| | + | #!/bin/bash |
| | + | DATE=$( echo ${FILE} | grep -Eo '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}' ) |
| | + | </syntaxhighlight> |
| | + | |
| | + | ===Ping IP range=== |
| | + | <source lang="bash">#!/bin/bash |
| | # cat ping_result.txt | grep ttl | awk '{print $4}' | sed s/:/''/g| sort | uniq | | # cat ping_result.txt | grep ttl | awk '{print $4}' | sed s/:/''/g| sort | uniq |
| | BASE=192.168.0. | | BASE=192.168.0. |
| Line 229: |
Line 267: |
| | ping -c 3 ${BASE}$i >> ping_result.txt | | ping -c 3 ${BASE}$i >> ping_result.txt |
| | done</source> | | done</source> |
| − | === Check if a package is installed === | + | ===Check if a package is installed=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/sh | | #!/bin/sh |
| Line 238: |
Line 276: |
| | debInst terminator | | debInst terminator |
| | </source> | | </source> |
| − | === Check if a file exists === | + | ===Check if a file exists=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | if [ -f $FILE1 ] | | if [ -f $FILE1 ] |
| Line 250: |
Line 288: |
| | </source> | | </source> |
| | | | |
| − | === Check if directory exists === | + | ===Check if directory exists=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 267: |
Line 305: |
| | </source> | | </source> |
| | | | |
| − | === Check user === | + | ===Check user=== |
| − | <source lang="bash"> | + | <syntaxhighlight lang="bash"> |
| | + | #!/bin/bash |
| | + | if [ "$EUID" -ne 0 ] |
| | + | then echo "Please run as root" |
| | + | exit |
| | + | fi |
| | + | </syntaxhighlight><source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| | user=$(whoami) | | user=$(whoami) |
| Line 280: |
Line 324: |
| | fi | | fi |
| | </source> | | </source> |
| − | === Execute localScript on remote server === | + | ===Execute localScript on remote server=== |
| | <nowiki>ssh [user]@[server] 'bash -s' < [local_script]</nowiki> | | <nowiki>ssh [user]@[server] 'bash -s' < [local_script]</nowiki> |
| | | | |
| − | === Remove directorys === | + | ===Remove directorys=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/sh | | #!/bin/sh |
| Line 303: |
Line 347: |
| | ~/myfolder3/$1/thisisafolder | | ~/myfolder3/$1/thisisafolder |
| | EOF | | EOF |
| − | </source> | + | </source><br /> |
| − | === Check if variable is set === | + | ===Check if variable is set=== |
| | if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi | | if [ -z ${var+x} ]; then echo "var is unset"; else echo "var is set to '$var'"; fi |
| − | === Check command success === | + | ===Check command success=== |
| | | | |
| − | <source lang="bash">#!/bin/bash
| + | <source lang="bash">#!/bin/bash |
| | ########################################### | | ########################################### |
| | # Pull latest code & # | | # Pull latest code & # |
| Line 348: |
Line 392: |
| | </source> | | </source> |
| | | | |
| − | === Ubuntu proxy setup === | + | ===Ubuntu proxy setup=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #! /bin/bash | | #! /bin/bash |
| Line 375: |
Line 419: |
| | </source> | | </source> |
| | | | |
| − | === Git check version === | + | ===Git check version=== |
| − | <source lang="bash">#!/bin/bash
| + | <source lang="bash">#!/bin/bash |
| | | | |
| | function set_upstream() { | | function set_upstream() { |
| Line 415: |
Line 459: |
| | } | | } |
| | check_latest_version</source> | | check_latest_version</source> |
| − | === Git check for updates and prompt to update === | + | ===Git check for updates and prompt to update=== |
| | <source lang="bash"> | | <source lang="bash"> |
| | #!/bin/bash | | #!/bin/bash |
| Line 457: |
Line 501: |
| | </source> | | </source> |
| | | | |
| − | === Logging === | + | ===Logging=== |
| | | | |
| | | | |
| | For logging, you can wrap sections of your script in curly braces and redirect the stdout to a log file: | | For logging, you can wrap sections of your script in curly braces and redirect the stdout to a log file: |
| − | <source lang=bash> | + | <source lang="bash"> |
| | { | | { |
| | script_command_1 | | script_command_1 |
| Line 469: |
Line 513: |
| | </source> | | </source> |
| | | | |
| − | === Links === | + | ===Links=== |
| | [http://tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide] | | [http://tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide] |