Programmation Shell
Ajouter l’autocompletion aux parametres d’un script
$ complete -W "mot1 mot2 mot3" script # Ajoute une liste finie de mots
# A ajouter au .bashrc
Voir Manual Bash
Substitution des variables
Instruction | Signification |
---|---|
${variable} | la variable. |
${variable:-mot} | la variable si elle existe sinon par le mot. |
${variable:=mot} | la variable si elle existe sinon par mot qui devient la valeur associée à variable. |
${variable:?mot} | la variable si elle existe, sinon affiche mot et le processus s’arrete. |
${variable:+mot} | le mot si la variable existe, sinon rien. |
${variable#forme} | la variable aprés troncature de son début par la plus petite séquence correspondant à la forme. |
${variable##forme} | la variable aprés troncature de son début par la plus grande séquence correspondant à la forme. |
${variable%forme} | la variable aprés troncature de la fin par la plus petite séquence correspondant à la forme. |
${variable%%forme} | la variable aprés troncature de la fin par la plus grande séquence correspondant à la forme. |
Exemple
#!/bin/bash
orig='I love Suzy and Mary'
pattern='Suzy'
new_part='Sara'
result="${orig/$pattern/$new_part}"
Pour remplacer toutes les occurences, doubler le premier slash
#!/bin/bash
string="The secret code is 12345"
pattern="[0-9]"
echo "${string//$pattern/X}" # The secret code is XXXXX
Boucle for de 100 à 200
Simple mais peu efficace (lancement d’un autre process pour execution du seq) et non portable (seq n’est pas GNU)
#!/bin/sh
for i in `seq 100 200` ;
do
echo $i
done
Simple mais peu efficace (construction en mémoire de la liste de tous les nombre => plus il y en a, moins c’est efficace)
#!/bin/bash
for i in {100..200} ;
do
echo $i
done
Plus efficace !
#!/bin/bash
for ((i = 1; i <= N; i++)); do
echo $i
done
Plus compliqué, mais efficace et très portable
i=1
while [ "$i" -le "$N" ]; do
echo $i
i=$(($i + 1))
done