Bloc-note 'BASH'
Le 29 octobre 2006, à 0:14 par Ulhume...

Bloc-Notes sur BASH

Historique (tout afficher)
  • v1 - Ajout des expressions régulières (2008-07-30 13:50)

Lecture d'un fichier ligne à lignes

Pour lire un fichier provenant de l'entrée standard :

while read line; do
   echo "une ligne : $line"
done

Maintenant, la commande while/done est un bloc de code, vous vous souvenez. Donc il est possible de l'utiliser comme une commande de manière un peu plus intéressante.

cat fichier_source.txt | {
while read line; do
   echo "une ligne : $line"
done } | grep "une_chaîne" > fichier_resultat.txt

Mes accolades ne servent ici à rien, c'est juste pour rendre le code un peu plus clair.

Définition d'un tableau

tableau[1]="un"
tableau[2]="deux"

for i in `seq ${#tableau[@]}` ; do
   echo "${tableau[$i]}"
done 

Expression régulières

Pour matcher des expression régulières, il n'est absolument pas nécessaire de passer systématiquement par awk ou perl, le code suivant marche très bien :

line="hello(ceci est un message bien sympa)"
if [[ $line =~ hello\((.*)\) ]] ; then
         echo "Phrase complète : '$BASH_REMATCH'"
         echo "Le premier groupe matché : '${BASH_REMATCH[1]}'"
fi

Les codes

$? ......... code de retour de la dernière commande
$! ......... PID de la dernière commande
$# ......... Nombre d'arguments passé au script
$1 $2 etc... Un paramètre passé par l'
appelant
$* ......... L'ensemble des arguments passé par l'appelant
$@ ......... La même chose mais chaque paramètre est entre double quotes
$0 ......... Le nom et chemin (non développé) invoqué par l'appelant
$$ ......... PID du script lui-même

Référencement indirect

L'idée est de pouvoir atteindre le contenu d'un variable, par exempte MA_VARIABLE, non pas de manière directe, mais à travers la lecture du contenu d'une autre variable qui contient son nom :

MA_VARIABLE=12
echo "Accès directe : $MA_VARIABLE"
NOM_DE_MA_VARIABLE=MA_VARIABLE
echo "Accès indirecte : ${!NOM_DE_MA_VARIABLE}"

Conditions

  -d  si le répertoire existe
  -e  si le fichier existe
  -f  si le fichier (pas un répertoire ou fichier de périphérique: /dev/sda1...)
  -r  si le fichier peut être lu
  -w  si le fichier peut être écrit
  -x  si le fichier peut être exécuté
  -L  si le fichier est un lien symbolique
  -z  si la chaine de caractère est nulle
  -n  si la chaine de caractère n'est pas nulle
  -eq  s'ils sont équivalents (nombre)
  -neq  s'ils ne sont pas équivalents
  = ou ==  si les chaines de caractère ou nombre sont égaux
  !=  s'ils ne sont pas égaux
  -lt  est plus petit que
  -gt  est plus grand que
  -le  est plus petit ou égale
  -ge  est plus grand ou égale
  -a ou &&  est plus grand ou égale
  -o ou ||  est plus grand ou égale

Debuggage

Pour debugger un programme bash il faut juste le lancer ainsi

bash -v mon_script.sh

Connaître le fichier réel qui se cache derrière un lien symbolique

> un_fichier
ln -s un_fichier un_lien
echo $(readlink -nf un_lien)
  un_fichier

Taille d'une chaîne

La base, commaître la longueur d'une chaîne :

  chaine="hello les amis"
  echo "longueur:${#string}"

Splitter une chaîne selon un caractère unique

Cas classique, splitter le nom et la valeur d'une chain variable=valeur :

paire="variable=valeur"
echo "Le nom est : ${paire%=*}"
echo "La valeur est : ${paire#*=}"

Télécharger et décompressser en une seule passe

wget http://ftp.drupal.org/files/projects/skymod-5.x-1.x-dev.tar.gz -O - | tar -zxv

Remplacement d'une chaîne par une autre

target=${file/.svgz/.svg.gz}

Commentaires

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage