====== Bash ====== ===== Array ===== * déclaration : ''array=( 1 2 3 )'' * ajouter un élément : ''array+=( 4 )'' * lister tous les éléments : ''echo "${array[@]}"'' * récupérer le nombre d'élement : ''echo ${#array[@]}'' ==== Fonctions utiles ==== === in_array === function in_array() { local needle=$1 el shift for el in "$@"; do [ "$el" = "$needle" ] && return 0 done return 1 } **Utilisation :** array=(1 2 3) in_array 1 ${array[@]} && echo IN in_array 5 ${array[@]} && echo OUT === is_empty === function is_empty() { [ $# -gt 0 ] && return 1 return 0 } **Utilisation :** array=(1 2 3) is_empty $array && echo empty ! is_empty $array && echo not empty === implode === function implode() { local d=${1-} f=${2-} if shift 2; then printf %s "$f" "${@/#/$d}" fi } **Utilisation :** array=(1 2 3) echo $( implode "," "${array[@]}" ) # Output: 1,2,3 echo -e "- $( implode "\n- " "${array[@]}" )" # Output: # - 1 # - 2 # - 3 === format_duration === function format_duration { local T=$1 local D=$((T/60/60/24)) local H=$((T/60/60%24)) local M=$((T/60%60)) local S=$((T%60)) (( $D > 0 )) && printf '%d days and ' $D printf '%02d:%02d:%02d' $H $M $S } === dump_ass_array === function dump_ass_array() { declare -n aarr="$1" echo "\"$1\" = {" for key in "${!aarr[@]}"; do printf ' "%s" => "%s"\n' "$key" "${aarr[$key]}" done echo "}" } **Utilisation :** declare -A myarray myarray[a]="b" myarray[c]="d" dump_ass_array myarray === var_dump === declare -p variableName ===== Gestion des paramètres ===== #!/bin/bash DEBUG=0 BIN_PATH="/bin/binary" EXTRA_ARGS=() function usage() { error="$1" [ -n "$error" ] && echo "$error" cat << EOF Usage : $(basename $0) [-d] [-b /path/to/binary] -b [path] Binary path (default: $BIN_PATH) -d Debug mode -X Enable bash tracing (=set -x) -h Show this message EOF [ -n "$error" ] && exit 1 exit 0 } function debug() { [ $DEBUG -eq 1 ] && >&2 echo -e "$( date '+%Y-%m-%d %H:%M:%S' ) - $@" } idx=1 while [ $idx -le $# ] do OPT=${!idx} case $OPT in -d) DEBUG=1 ;; -h) usage ;; -b) ((idx++)) BIN_PATH=${!idx} if [ ! -x "$BIN_PATH" ] then usage "Invalid binary path ($BIN_PATH)" fi ;; -X) set -x ;; *) EXTRA_ARGS+=( $OPT ) ;; esac ((idx++)) done debug "Extra args: ${EXTRA_ARGS[@]}" ===== Barre de progression ===== declare -A PBARS declare PBID # Create a progress bar # Arguments: # - the progress bar title (default: Progress) # - total count (default: 100) # - bar size (default: use all the width of the terminal with a minimum of 5 caracters) # - the name of the variable use to store the progress bar ID (default: PBID) function pbar_create() { # Define the name of the variable that will store the progress bar ID [ -n "$4" ] && PBAR_ID_VAR="$4" || PBAR_ID_VAR=PBID declare -n ID="$PBAR_ID_VAR" # Generate the progress bar ID ID=$( tr -dc A-Za-z0-9 **Utilisation :** pbar_create "Test" 20 for i in $( seq 1 20 ) do pbar_increment sleep 0.1 done pbar_finish La fonction [[#format_duration]] est nécessaire.