Categorie├źn
Linux-Bash

Sjabloon Bash script

Een sjabloon als uitgangspunt voor bash scripts.

Doel

We maken een script dat als sjabloon kan worden gebruikt.

Aanleiding/overwegingen

Telkens bedacht ik dezelfde dingen weer net even anders opnieuw en opnieuw bij het maken van nieuwe scripts. Het is handige om een vaste basis te hebben. Dat zorgt ervoor dat je niet telkens dezelfde basis taken hoeft in te vullen en een standaardisatie hebt van hoe je je scripts opbouwt. Dat vergroot de leesbaarheid.

Voorbereiding

  • Voor een nieuwe taak maak je een kopie van de ScriptTemplate.sh file naar een nieuw bestand voor de taak die uitgevoerd moet worden.
  • Download het bestand: ScriptTemplate.txt en hernoem de extensie .txt tot .sh.

Uitvoering

  • Maak het script uitvoerbaar met het commando chmod +x. Zie in onderstaand plaatje bij ‘Resultaat’.
  • Voor betere leesbaarheid is het venster hieronder te vergroten. Selecteer de rechter onder hoek en versleep deze om het breder te maken.
  • Ik documenteer al mijn scripts met steenkolen Engels.
  • Verdere uitleg en tips worden onder het venster gegeven met verwijzing naar de regelnummers.
#!/bin/bash
#-----------------------------------
# ScriptTemplate by Jan Peppink - https://ict.peppink.nl
# Modify to your needs.
#-----------------------------------
# This script only sleeps for 30 seconds.
 
######################################################################
# Set Environment
#-----------------------------------
# when calling /home/user/scripts/ScriptTemplate.sh "'option one'" "'optiontwo'"
# ${@}     = 'option one' 'optiontwo'
# $1       = 'option one'
# $2       = 'optiontwo'
# ${0}     = /home/user/scripts/ScriptTemplate.sh - Full Path and filename
# ${0%/*}  % removes from the end. Everything including last found slash. Given path remains.
#          = /home/user/scripts (or . when calling ./ScriptTemplate.sh)
# dirname ${0} is saver. Always gives the full path.
# ${0##*/} ## removes from the start. Everything including last found slash. Filname remains.
#          = ScriptTemplate.sh = Script name
  MYPATH=$(dirname $0)
  MYNAME=${0##*/}
  VERBOSE=0

#-----------------------------------
# Include Domoticz variables file
#-----------------------------------
  if [ -f "$MYPATH/DomoScripts.conf" ] ; then
	source "$MYPATH/DomoScripts.conf"
  fi

######################################################################
# Functions go here
#-----------------------------------
# Display verbose output if wanted (started with -v option)
function verbose {
	if [[ $VERBOSE -eq 1 ]] ; then
		echo `date +"%Y-%m-%d %H:%M"` - $1
	fi
}

######################################################################
# Startup Checks go here
#-----------------------------------
# Exit when this script is already running 
#-----------------------------------
  if [ "$(pgrep -fn ${0})" -ne "$(pgrep -fo ${0})" ] ; then
	echo "$MYNAME is already running. I quit!"
	exit
  fi

#-----------------------------------
# Get start options
#-----------------------------------
  if [[ "$#" -ge 1 ]] ; then
	if [[ $1 == "verbose" ]] || [[ $1 == "--verbose" ]] || [[ $1 == "-v" ]] ; then
		VERBOSE=1
	fi
  fi

######################################################################
# Start to do something
verbose "Starting $MYNAME"

#-----------------------------------
# When needed stop services before running my code
#-----------------------------------
#verbose "Stop some services."
# sudo service domoticz.sh stop
# sudo service cron stop

######################################################################
# Main script 
#-----------------------------------
# Your job code comes here.
#-----------------------------------
verbose "This script only sleeps for 30 seconds"
  sleep 30 

######################################################################
# Finishing script 
#-----------------------------------
# When needed (re)start services
#-----------------------------------
#verbose "Start the stopped services again."
# sudo service domoticz.sh start
# sudo service cron start

######################################################################
verbose "Ending $MYNAME"

######## THATs All ###################################################

Toelichting bij de regels

Volgt

Resultaat

Schermuitvoer van het script

User@MyMachine:~/scripts$ vi ScriptTemplate.sh 
User@MyMachine:~/scripts$ chmod +x ScriptTemplate.sh
User@MyMachine:~/scripts$ ./ScriptTemplate.sh -v
2020-12-12 16:12 - Starting ScriptTemplate.sh
2020-12-12 16:12 - This script only sleeps for 30 seconds
2020-12-12 16:13 - Ending ScriptTemplate.sh
User@MyMachine:~/scripts$

Tips

  • Plaats scripts bij elkaar op een herkenbare plaats b.v. ~/scripts

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *