Bash: trucs et astuces : Différence entre versions
m |
m |
||
| Ligne 51 : | Ligne 51 : | ||
if [ ${var:=n} = "y" ]; then ... | if [ ${var:=n} = "y" ]; then ... | ||
=> affecte 'n' par défaut à $var. | => affecte 'n' par défaut à $var. | ||
| + | |||
| + | === manipuler les lignes d'un fichier: exemple conversion d'un dossier mp3 => wav === | ||
| + | # chercher lister les fichiers mp3 | ||
| + | find . -name "*.mp3" > /tmp/lst | ||
| + | # lire la liste dans un tableau (1 enregistrement par ligne) | ||
| + | IFS=$'\n' read -d '' -r -a files < /tmp/lst | ||
| + | while [ $i -lt ${#files[@]} ]; do | ||
| + | fout=` echo ${files[$i]} | sed "s/.mp3/.wav/"`; | ||
| + | lame --decode "${files[$i]}" "../wav/$fout"; | ||
| + | let i=i+1; | ||
| + | done | ||
=== variables de comportement === | === variables de comportement === | ||
set -u => sortie en erreur si variable unset. cf man bash, section 'builtin' | set -u => sortie en erreur si variable unset. cf man bash, section 'builtin' | ||
Version du 10 septembre 2016 à 22:45
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.
manipuler les lignes d'un fichier: exemple conversion d'un dossier mp3 => wav
# chercher lister les fichiers mp3
find . -name "*.mp3" > /tmp/lst
# lire la liste dans un tableau (1 enregistrement par ligne)
IFS=$'\n' read -d -r -a files < /tmp/lst
while [ $i -lt ${#files[@]} ]; do
fout=` echo ${files[$i]} | sed "s/.mp3/.wav/"`;
lame --decode "${files[$i]}" "../wav/$fout";
let i=i+1;
done
variables de comportement
set -u => sortie en erreur si variable unset. cf man bash, section 'builtin'