Shell script template

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Shell script template

Beitrag von Voyager_MP » 15.01.2014 14:59:21

Hi, ich wuerde gerne euere Meinung zu einem shell script template hoeren, vielleicht kann man es ja noch verbesseren, oder es hat irgend einen bug.

Vielleicht hilft ja auch irgend jemanden ;-)

Habs noch etwas erweitert

Code: Alles auswählen

#!/bin/bash - 
#===============================================================================
#
#          FILE:  template.sh
# 
#         USAGE:  ./template.sh 
# 
#   DESCRIPTION: 
# 
#       OPTIONS:  ---
#  REQUIREMENTS:  ---
#          BUGS:  ---
#         NOTES:  ---
#       COMPANY: NSAS - Network System Access Solutions
#       CREATED: 12/11/2013 11:02:51 AM CET
#      REVISION:  ---
#     COPYRIGHT: Copyright (c) 2014, Michèl Pelzer - http://www.nsas.de
#
#===============================================================================
#set -x                             # Display commands and their arguments.
#set -v                             # Display shell input lines as they are read.
#set -n                             # Read commands but do not execute them.
set -o nounset                      # Treat unset variables as an error
#===============================================================================
PATH="${HOME}/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin"
SCRIPTNAME=$(basename $0)           # Script name
NAME=${SCRIPTNAME%%.*}              # Script name without file extension
PARAMETERNR="$#"                    # Number off parameters
CURRENTDIR=${PWD}                   # Current directory
USER=${USER}                        # Username
DATE=$(date +%d:%m:%Y-%T)           # Date string
HOST=$(hostname)                    # System host name
DOMAIN=$(hostname -d)               # Domain name  
ERROR="0"                           # Reset error counter
LOGFILE="${NAME}.log"               # Default log file
QUIET="false"                       # Default logging is enabled
LANG=en_US.UTF-8                    # Define default Language set 
EMAIL="${USER}@${DOMAIN}"           # Reporting Email 
CONFIGFILE="/etc/default/${NAME}"   # Default config file will be sourced 
PID=$$                              # Current running prossess ID
SCRATCH=/tmp/${PID}.scratch         # Scratch directory (temp directory)
#===============================================================================
# Write your code here. (in function main)
#===============================================================================
function main() {
    TAG=${FUNCNAME[0]}
    log "[I] [${TAG}]"
    #######################
    #                     #
    # YOUR CODE GOES HERE #
    #                     #
    #######################
    return 0
}
# Do not edit below 
#===============================================================================
# Help function
#===============================================================================
function usage() {
    TAG=${FUNCNAME[0]}
    echo "
    Usage: ${SCRIPTNAME} [options]
 
        -d           optional  Enables debug (set -x)
        -h           optional  Print this help message
        -q           optional  Suppress log messages on screen, just log them.
    "
    exit 1
}
#===============================================================================
# Log function
#===============================================================================
function log() {
    TAG=${FUNCNAME[0]}
    if [ ${QUIET} = "true" ]
        then
            echo -e "[${NAME}] ${@}" >> ${LOGFILE}
        else
            echo "[${NAME}] ${@}" | tee -a ${LOGFILE}
    fi
}
#===============================================================================
# Cleanup function - will remove scratch directory
#===============================================================================
function cleanup() {
    TAG=${FUNCNAME[0]}
    if [[ -d "${SCRATCH}" ]]
        then
            log "[I] [${TAG}]"
            rmdir "${SCRATCH}"
    fi
}
#===============================================================================
# Sendstatus function - Sends an email to defined email address
#===============================================================================
function sendstatus() {
    TAG=${FUNCNAME[0]}
    cat ${LOGFILE} | mail -s "[${NAME}] ${@}" ${EMAIL}
    log "[N] [${TAG}]"
}
#===============================================================================
# Exit function - Will be called upon error
#===============================================================================
function die() {
    TAG=${FUNCNAME[0]}
    log "[E] [${TAG}]"
    sendstatus
    cleanup
    log "[I] stop"
    exit 2
}
#===============================================================================
# Source default config if readable and is not empty 
#===============================================================================
if [ -r ${CONFIGFILE} ] && [ -s ${CONFIGFILE} ]
    then
        source ${CONFIGFILE}
fi
#===============================================================================
# Makes sure we are not already running
#===============================================================================
if [ $(ps h -C ${SCRIPTNAME} | grep -v $$ | wc -l) -gt 1 ]
    then
        log "[I] script already running"
        die
fi
#===============================================================================
# Get script options ($@) - See function usage
#===============================================================================
while getopts :dhq args
do
  case ${args} in
      d)  set -x ;;
      h)  usage ;;
      q)  QUIET="true" ;;
      *)  usage ;;
  esac
done
#===============================================================================
# Finally - Now we run :-)
#===============================================================================
trap 'die' 1 2 3 15
mkdir "${SCRATCH}"
log "[I] [start]"
main "${@}"
cleanup
log "[I] [stop]"
Zuletzt geändert von Voyager_MP am 08.12.2014 14:19:14, insgesamt 5-mal geändert.
Gruß Michel

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Re: Shell script tempalte

Beitrag von roli » 15.01.2014 16:52:30

Hi,

sieht auf den ersten Blick gut aus. Ich selber schreibe gewöhnlich nur einige Kommentarzeilen in den Kopf, und dann noch an Stellen, die es meiner Meinung nach nötig haben.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Re: Shell script tempalte

Beitrag von Voyager_MP » 16.01.2014 08:59:03

Da ich ohne hin mit python beginnen muss, koennte mir jemand helfen das template in python zu schreiben ?
Gruß Michel

Benutzeravatar
shoening
Beiträge: 898
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Shell script tempalte

Beitrag von shoening » 16.01.2014 10:45:18

Hi,

nur um zu verstehen, was Du willst: Willst Du

a) ein Template fuer ein Python Script bauen oder
b) die Platzhalter in deinem template.sh mittels python suchen und ersetzen

Fuer b) bietet sich in Python die Klasse string.Template an.

Ciao
Stefan

PS.: So ein Script Template ist sicherlich auch im Wiki ganz gut aufgehoben.
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Benutzeravatar
Voyager_MP
Beiträge: 628
Registriert: 22.06.2004 10:04:07
Wohnort: Aachen

Re: Shell script tempalte

Beitrag von Voyager_MP » 16.01.2014 12:26:25

Was ich gerne haette, waere mein template in python geschrieben. So das fuer die ersten scripte in python ein gutes template hat.
Gruß Michel

Benutzeravatar
shoening
Beiträge: 898
Registriert: 28.01.2005 21:05:59
Lizenz eigener Beiträge: MIT Lizenz

Re: Shell script tempalte

Beitrag von shoening » 16.01.2014 12:35:12

Hi,

also so was:

Code: Alles auswählen

#/usr/bin/env python

'''
Dieses Paket macht bla fasel blub.
'''

# --------------------------------------------
# GLOBAL IMPORTS
# --------------------------------------------

# --------------------------------------------
# CLASSES AND FUNCTIONS
# --------------------------------------------

# --------------------------------------------
# THE MAIN FUNCTION
# --------------------------------------------

def main():
    pass

# --------------------------------------------
# CALL MAIN WHEN CALLED AS SCRIPT
# --------------------------------------------

if __name__ == '__main__':
     main()

Ciao
Stefan
Bürokratie kann man nur durch ihre Anwendung bekämpfen.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Shell script template

Beitrag von Meillo » 16.01.2014 13:56:33

Voyager_MP hat geschrieben:Hi, ich wuerde gerne euere Meinung zu einem shell script template hoeren, vielleicht kann man es ja noch verbesseren, oder es hat irgend einen bug.
Es muss sich schon um ein grosses Projekt mit vielen Scripten handeln oder um ein besonders umfangreiches Script, damit sich soviel Overhead lohnt.

Mir kommt das so vor wie das Hello World oder cat(1) von GNU. Dazu kann man so oder so stehen.
Use ed once in a while!

Antworten