====== 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.