Bash: trucs et astuces
Révision datée du 14 juillet 2016 à 09:16 par Toine (discussion | contributions)
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'