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