Bash: trucs et astuces : Différence entre versions
(Page créée avec « == Fonctions utiles == === Conversions === # conversion netmask => cidr # ex: mask2cidr 255.255.128.0 --> 17 # suppose qu'il n'y a plus de "255." après un octet no... ») |
m |
||
| Ligne 20 : | Ligne 20 : | ||
echo ${1-0}.${2-0}.${3-0}.${4-0} | echo ${1-0}.${2-0}.${3-0}.${4-0} | ||
} | } | ||
| + | |||
| + | === manipuler des chaines de caractères === | ||
| + | # split chaine de caracteres: | ||
| + | 1)IFS: | ||
| + | OIFS=$IFS | ||
| + | string="ABCDE-123456" | ||
| + | IFS=- # use "local IFS=-" inside the function | ||
| + | set $string | ||
| + | echo $1 # >>> ABCDE | ||
| + | echo $2 # >>> 123456 | ||
| + | IFS=$OIFS # restituer le séparateur originel | ||
| + | |||
| + | 2) si seulement 2 champs a séparer (ici separateur = ' ' ) | ||
| + | line="myhost 192.168.1.145" | ||
| + | $ echo ${line% *} | ||
| + | myhost | ||
| + | $ echo ${line#* } | ||
| + | 192.168.1.145 | ||
| + | |||
| + | 3) affecter les différents termes d'une ligne (cf IFS) à un tableau | ||
| + | line="myhost 192.168.1.145 is a good host" | ||
| + | $ termes=($line) | ||
| + | $ echo ${termes[0]} | ||
| + | myhost | ||
| + | $ echo ${termes[4]} | ||
| + | good | ||
| + | |||
| + | === manipuler des variables === | ||
| + | # variable avec valeur par defaut | ||
| + | if [ ${var:=n} = "y" ]; then ... | ||
| + | => affecte 'n' par défaut à $var. | ||
| + | |||
| + | === variables de comportement === | ||
| + | set -u => sortie en erreur si variable unset. cf man bash, section 'builtin' | ||
Version du 14 juillet 2016 à 09:16
Sommaire
Fonctions utiles
Conversions
# conversion netmask => cidr
# ex: mask2cidr 255.255.128.0 --> 17
# suppose qu'il n'y a plus de "255." après un octet non-255
mask2cidr ()
{
local x=${1##*255.}
set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
x=${1%%$3*}
echo $(( $2 + (${#x}/4) ))
}
# conversion cidr => netmask
# ex: cidr2mask 17 --> 255.255.128.0
cidr2mask ()
{
set -- $(( 5 - ($1 / 8) )) 255 255 255 255 $(( (255 << (8 - ($1 % 8))) & 255 )) 0 0 0
[ $1 -gt 1 ] && shift $1 || shift
echo ${1-0}.${2-0}.${3-0}.${4-0}
}
manipuler des chaines de caractères
# split chaine de caracteres: 1)IFS: OIFS=$IFS string="ABCDE-123456" IFS=- # use "local IFS=-" inside the function set $string echo $1 # >>> ABCDE echo $2 # >>> 123456 IFS=$OIFS # restituer le séparateur originel
2) si seulement 2 champs a séparer (ici separateur = ' ' )
line="myhost 192.168.1.145"
$ echo ${line% *}
myhost
$ echo ${line#* }
192.168.1.145
3) affecter les différents termes d'une ligne (cf IFS) à un tableau
line="myhost 192.168.1.145 is a good host"
$ termes=($line)
$ echo ${termes[0]}
myhost
$ echo ${termes[4]}
good
manipuler des variables
# variable avec valeur par defaut
if [ ${var:=n} = "y" ]; then ...
=> affecte 'n' par défaut à $var.
variables de comportement
set -u => sortie en erreur si variable unset. cf man bash, section 'builtin'