157 lines
4.2 KiB
Bash
157 lines
4.2 KiB
Bash
##@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 first_char() {
|
|
# retourner le premier caractère de la chaine $*
|
|
local str="$*"
|
|
echo "${str:0:1}"
|
|
}
|
|
function last_char() {
|
|
# retourner le dernier caractère de la chaine $*
|
|
local str="$*"
|
|
echo "${str: -1:1}"
|
|
}
|
|
function first_chars() {
|
|
# retourner tous les caractères de la chaine $*, excepté le dernier
|
|
local str="$*"
|
|
recho "${str:0:$((${#1}-1))}"
|
|
}
|
|
function last_chars() {
|
|
# retourner tous les caractères de la chaine $*, excepté le premier
|
|
local str="$*"
|
|
recho "${str:1}"
|
|
}
|
|
function first_char_is() {
|
|
# Tester si le premier caractère de la chaine $1 est $2
|
|
[ "${1:0:1}" == "$2" ]
|
|
}
|
|
function last_char_is() {
|
|
# Tester si le dernier caractère de la chaine $1 est $2
|
|
[ "${1:$((-1)):1}" == "$2" ]
|
|
}
|
|
function beginswith() {
|
|
# Tester si la chaine $1 commence par le wildcard $2
|
|
local str="$1" pattern="$2"
|
|
eval '[ "${str#$pattern}" != "$str" ]'
|
|
}
|
|
function endswith() {
|
|
# Tester si la chaine $1 se termine par le wildcard $2
|
|
local str="$1" pattern="$2"
|
|
eval '[ "${str%$pattern}" != "$str" ]'
|
|
}
|