##@cooked comments # -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8 ## Fonctions de base: gestion des valeurs scalaires ##@cooked nocomments # Note: contient du code spécifique à bash 4. Le module base.compat réimplémente # les fonctions concernées pour les rendre compatible avec bash >= 2.x uprovide base.string urequire base.core function straddp() { # ajouter le préfixe $1 à $2* local p="$1"; shift echo "$p$*" } function strdelp() { # enlever le préfixe $1 à $2* local p="$1"; shift local str="$*" echo "${str#$p}" } function strdelp2() { # enlever le préfixe $1 le plus long à $2* local p="$1"; shift local str="$*" echo "${str##$p}" } function stradds() { # ajouter le suffixe $1 à $2* local s="$1"; shift echo "$*$s" } function strdels() { # enlever le suffixe $1 à $2* local s="$1"; shift local str="$*" echo "${str%$s}" } function strdels2() { # enlever le suffixe le plus long $1 à $2* local s="$1"; shift local str="$*" echo "${str%%$s}" } function strlower() { # afficher en minuscule la valeur $* local str="$*" echo "${str,,}" } function strlower1() { # afficher la valeur $* après avoir converti la première lettre en minuscule local str="$*" echo "${str,}" } function strlowers() { # afficher les valeurs $1..* après avoir converti leur première lettre en # minuscule local str="$*" echo "${*,}" } function strupper() { # afficher en majuscule la valeur $* local str="$*" echo "${str^^}" } function strupper1() { # afficher la valeur $* après avoir converti la première lettre en majuscule local str="$*" echo "${str^}" } function struppers() { # afficher les valeurs $1..* après avoir converti leur première lettre en # majuscule echo "${*^}" } function strmid() { # Afficher la plage $1 de la valeur $2*. La plage peut être d'une des formes # 'start', '[start]:length'. Si start est négatif, le compte est effectué à # partir de la fin de la chaine. Si length est négatif, il est rajouté à la # longueur de la chaine à partir de start local range="$1"; shift local str="$*" if [[ "$range" == *:-* ]]; then local max=${#str} [ $max -eq 0 ] && return local start="${range%%:*}" [ -n "$start" ] || start=0 while [ "$start" -lt 0 ]; do start=$(($max$start)) done max=$(($max-$start)) local length="${range#*:}" while [ "$length" -lt 0 ]; do length=$(($max$length)) done range="$start:$length" fi eval 'echo "${str:'" $range"'}"' } function strrepl() { # Remplacer dans la valeur $3* le motif $1 par la chaine $2. $1 peut commencer # par l'un des caractères /, #, % pour indiquer le type de recherche local pattern="$1"; shift local repl="$1"; shift local str="$*" local cmd='echo "${str/' if [ "${pattern#/}" != "$pattern" ]; then pattern="${pattern#/}" cmd="$cmd/" elif [ "${pattern#\#}" != "$pattern" ]; then pattern="${pattern#\#}" cmd="$cmd#" elif [ "${pattern#%}" != "$pattern" ]; then pattern="${pattern#%}" cmd="$cmd%" fi cmd="$cmd"'$pattern/$repl}"' eval "$cmd" } function isnum() { # retourner vrai si $1 est une valeur numérique entière (positive ou négative) [ ${#1} -gt 0 ] || return 1 local v="$1" v="${v#-}" v="${v//[0-9]/}" [ -z "$v" ] } function ispnum() { # retourner vrai si $1 est une valeur numérique entière positive [ ${#1} -gt 0 ] || return 1 local v="$1" v="${v//[0-9]/}" [ -z "$v" ] } function isrnum() { # retourner vrai si $1 est une valeur numérique réelle (positive ou négative) # le séparateur décimal peut être . ou , [ ${#1} -gt 0 ] || return 1 local v="$1" v="${v#-}" v="${v//./}" v="${v//,/}" v="${v//[0-9]/}" [ -z "$v" ] } function is_yes() { # retourner vrai si $1 est une valeur "oui" case "${1,,}" in o|oui|y|yes|v|vrai|t|true|on) return 0;; esac isnum "$1" && [ "$1" -ne 0 ] && return 0 return 1 } function is_no() { # retourner vrai si $1 est une valeur "non" case "${1,,}" in n|non|no|f|faux|false|off) return 0;; esac isnum "$1" && [ "$1" -eq 0 ] && return 0 return 1 } function yesval() { # normaliser une valeur vraie: si $1 est une valeur "oui", afficher 1, sinon # afficher une chaine vide is_yes "$1" && echo 1 }