Outils pour utilisateurs

Outils du site


programmation_bash

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
programmation_bash [2007/08/07 21:50] – créée thierryprogrammation_bash [2010/04/29 09:32] (Version actuelle) thierry
Ligne 1: Ligne 1:
 ====== Bash ====== ====== Bash ======
 +Lien:
 +  *[[http://wooledge.org:8000/BashFAQ|BashFAQ]]
  
 ===== Les bases ===== ===== Les bases =====
Ligne 11: Ligne 13:
   $ chmod a+x mon_scripte.sh   $ chmod a+x mon_scripte.sh
   $ ./mon_scripte.sh   $ ./mon_scripte.sh
 +
 +
 +
 ===== Variables ===== ===== Variables =====
 === Declarer === === Declarer ===
Ligne 30: Ligne 35:
   face   face
 === Motif === === Motif ===
-|  *  | n'importe quelle _chaine_ caractere |+|  *  | n'importe quelle _chaine_ de caracteres |
 |  ?  | n'importe quelle caractere | |  ?  | n'importe quelle caractere |
-''\* ou \? ou \\ pour le caractere aprés le ''+|  []  | liste de caractère 
 +\* pour * ou \? pour ? ou \\\\ pour \
  
-**Extraction par le début:**\\+**Elimination du début (préfixe)**\\ 
 +Le plus petit:
 Syntaxe: ${variable#motif} Syntaxe: ${variable#motif}
   echo ${COMMENT#Inter}   echo ${COMMENT#Inter}
 +  echo ${COMMENT#*a}
 +  echo ${COMMENT#???e}
 +  echo ${COMMENT#[A-Z][a-z]}
 +  echo ${COMMENT}
 Sortie: Sortie:
   face reseau   face reseau
 +  ce reseau
 +  rface reseau
 +  terface reseau
 +  Interface reseau
 +
 +Le plus long:
 +Syntaxe: ${variable##motif}
 +  echo ${COMMENT##*a}
 +Sortie:
 +  u
 +
 +===== redirection =====
 +Lien: http://doc.async.com.br/abs-0.3/HTML/io-redirection.html
 +
 +Lire , line a line, la sortie (stdout) d'une commande:
 +  digitemp_DS2490 -q -t 0 -o 2 |
 +  while read line; do
 +    echo "> $line"
 +  done
 +
 +===== regex =====
 +
 +  #!/bin/sh
 +  
 +  ARG="$1"
 +  
 +  if [[ "$ARG" =~ "^([[:alnum:]]*)=([[:digit:]]*)$" ]]; then
 +    echo "${BASH_REMATCH[1]}"
 +    echo "${BASH_REMATCH[2]}"
 +  fi
 +
 +Avec gnu bash <= 3.1, test:
 +  $ ./t option=1234
 +  option
 +  1234
 +
 +Le problème, sous Lenny, ca ne fonctionnera plus a cause des "quote"... il faut les virer.\\
 +Quand ce n'est pas possible (a cause des espaces par exemple), il faut mettre le regex dans une variable.
 +
 +Donc, ecrire sans "quote" :
 +  ...
 +  if [[ "$ARG" =~ ^([[:alnum:]]*)=([[:digit:]]*)$ ]]; then
 +  ...
 +
 +  $ sh --version
 +  GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
 +  Copyright (C) 2007 Free Software Foundation, Inc.
 +
 +===== Delimiteurs =====
 +Lien: http://www.debianadmin.com/delimiters-in-bash.html
 +
 +Exemple:
 +  #!/bin/sh
 +  
 +  cat /etc/passwd | while read line; do
 +  
 +  IFS=":"
 +  read username pass auid agid agroup ahome ashell <<EOF
 +  $line
 +  EOF
 +  
 +  echo "username=" $username
 +  echo "ashell=" $ashell
 +  
 +  done
 +  
 +  unset IFS
 + 
 +  #!/bin/sh
 +    
 +  IFS=":"
 +  read first_name last_name  <<< "$( echo 'hello:ducon' )"
 +  
 +  echo "1: $first_name"
 +  echo "2: $last_name"
 +  
 +  unset IFS
 +
 +Output du dernier exemple:
 +  1: hello
 +  2: ducon
 +
 +===== LOCK =====
 +Realiser un LOCK sur un scripte...
 +
 +Lien: http://bash-hackers.org/wiki/doku.php/howto/mutex
 +
 +Pour resumer: la seule solution portable est d'utiliser "mkdir"
 +
 +Voir aussi "trap" pour supprimer le "lock"
 +
 +===== TRAP =====
 +
 +Comment traper les signaux, ou simplement la sortie du script...
 +
 +Lien: http://www.traduc.org/~gleu/ykerb/ch12.html
 +
 +====== awk ======
 +
 +===== /etc/passwd =====
 +
 +   cat /etc/passwd | awk -F':' '{ printf("%s => %s uid:%s\n", $7, $1 , $3 ) }' 
 +
programmation_bash.1186523435.txt.gz · Dernière modification : 2007/08/07 21:50 de thierry