#!/bin/bash # Title: # Version: 0.0 a # Author: Frédéric CHEVALIER # Created in: 20xx- # Modified in: # Licence : GPL v3 #======# # Aims # #======# aim="" #==========# # Versions # #==========# # v0.0 - 20xx-xx-xx: creation version=$(grep -i -m 1 "version" "$0" | cut -d ":" -f 2 | sed "s/^ *//g") #===========# # Functions # #===========# # Usage message function usage { echo -e " \e[32m ${0##*/} \e[00m -i|--in file -o|--out value -v|--val value -s|--switch -h|--help Aim: $aim Version: $version Options: -i, --in input file -o, --out name of output file -v, --val value -s, --switch switch -h, --help this message " } # Info message function info { if [[ -t 1 ]] then echo -e "\e[32mInfo:\e[00m $1" else echo -e "Info: $1" fi } # Warning message function warning { if [[ -t 1 ]] then echo -e "\e[33mWarning:\e[00m $1" else echo -e "Warning: $1" fi } # Error message ## usage: error "message" exit_code ## exit code optional (no exit allowing downstream steps) function error { if [[ -t 1 ]] then echo -e "\e[31mError:\e[00m $1" else echo -e "Error: $1" fi if [[ -n $2 ]] then exit $2 fi } # Dependency test function test_dep { which $1 &> /dev/null if [[ $? != 0 ]] then error "Package $1 is needed. Exiting..." 1 fi } # Progress bar ## Usage: ProgressBar $mystep $myend function ProgressBar { if [[ -t 1 ]] then # Process data let _progress=(${1}*100/${2}*100)/100 let _done=(${_progress}*4)/10 let _left=40-$_done # Build progressbar string lengths _fill=$(printf "%${_done}s") _empty=$(printf "%${_left}s") # Build progressbar strings and print the ProgressBar line # Output example: # Progress : [########################################] 100% #printf "\rProgress : [${_fill// /=}${_empty// / }] ${_progress}%%" printf "\r\e[32mProgress:\e[00m [${_fill// /=}${_empty// / }] ${_progress}%%" [[ ${_progress} == 100 ]] && echo "" fi } # Clean up function for trap command ## Usage: clean_up file1 file2 ... function clean_up { rm -rf $@ exit 1 } #==============# # Dependencies # #==============# test_dep #===========# # Variables # #===========# # Options while [[ $# -gt 0 ]] do case $1 in -i|--in ) input="$2" ; shift 2 while [[ ! -z "$1" && $(echo "$1"\ | grep -qv "^-" ; echo $?) == 0 ]] do input=$(echo "$input" "$1") shift done ;; -o|--out ) output="$2" ; shift 2 ;; -v|--val ) v="$2" ; shift 2 ;; -s|--switch ) switch=1 ; shift ;; -h|--help ) usage ; exit 0 ;; * ) error "Invalid option: $1\n$(usage)" 1 ;; esac done # Check the existence of obligatory options if [[ -z "$input" ]] then error "The option input is required. Exiting...\n$(usage)" 1 fi if [[ -z "$output" ]] then output= fi #============# # Processing # #============# #-------------# # Sub-section # #-------------# # Progress bar for i in myvar do ProgressBar $mystep $myend done # Trap function ## for i in {1..3} ; do cmd & mypid="$mypid $!" done # OR cmd & mypid=$! ## trap "kill $mypid ; clean_up $tmp1 $tmp2" SIGINT SIGTERM # Clean_up function to remove tmp files wait exit 0