iable **interne** de type chaîne de caractères:
<code bash>
# Attention pas d'espaces entre le nom de v... affectation '=' et la valeur
mavar="hello bash"
</code>
La primitive **declare** permet de définir une... tiliser indifféremment ces mnémoniques.
</note>
<code bash>
# Forme générale:
# declare option label_va... tier
number=33
number=number+3
echo $number
36
</code>
* Voir les notes concernant l'utilisation des
ut d'un fichier on utilise la commande **head**:
<code bash>
# extraire les 15 premières lignes
$ head -n 15 /path/to/file
</code>
Pour extraire les dernière lignes d'un fichier, utiliser la commande **tail**:
<code bash>
# extraire les 20 dernières lignes
$ tail -n 20 /path/to/file
</code>
La commande **split** permet de découper un fic
commun à beaucoup de langages
de programmation.
<code bash>
while condition
do
commande1
commande2
...
done
</code>
==== Exemple d'utilisation de boucles while ====
<code bash>
#!/bin/bash
# Si l'argument 1 est vide, un... $i -lt $nb ] ; do
echo $mot
i=$(($i + 1))
done
</code>
==== Lecture avec read et while ====
Une utili
emples de recherche sont présentées ci dessous.
<code bash>
# Rechercher dans les répertoires /etc et /... ou .cpp
find . -type f -name "*.py" -o "*.cpp"
</code>
La commande find permet de lancer des traitemen... un exemple d'utilisation de l'option **-exec**:
<code bash>
# Retrouver à partir du répertoire courant ... .txt" -exec wc -l {} ’;’ -exec cp {} {}.bak ’;’
</code>
===== Rechercher/traiter dans un fichier =====
assés au script via la ligne de commande; Dans le code du script on récupère ces arguments à l’aide de v... l’exemple d’une affectation par la commande set:
<code bash>
$ set -- 1 2 3 4 5 6 7 8 9 a b
$ echo $1 $9 ${10}
1 9 a
</code>
En plus des variables positionnelles, des varia... ette commande, prenons le script decal.sh avec le code suivant:
<code bash>
#!/bin/bash
echo $# $@
shift
haque opérateur doit être séparé par un espace:
<code bash>
# Pour que expr puisse interpréter correcte... shell de les traiter.
$ expr \( 10 + 6 \) / 2
8
</code>
expr est une commande externe, son choix est pe... rtinent lorsque des contraintes de portabilité du code existent.
===== Substitution arithmétique =====
... yntaxe de la substitution arithmétique en Bash:
<code bash>
$(( expression ))
</code>
Elle présente qu
d’une commande au résultat d’une autre. Selon le code retour d’une première expression, une autre sera ... tée que lorsque cmd1 s'est terminée correctement (code retour 0) |
^ %%cmd1 || cmd2%% | cmd2 n'est exécutée que lorsque cmd1 s'est terminée en erreur ( code retour différent de 0) |
===== Structure if ====... suite de commandes au résultat d’une condition.
<code bash>
if condition
then
cmd1;
cmd2;
...
mande comme une expression conditionnelle dont le code retour est assimilé à vrai s’il vaut 0 et à faux ... =
Deux syntaxes valides pour la commande test:
<code bash>
# Utilisation du mnémonique
test "$a" -gt 1... rant
# et avant crochet fermant
[ "$a" -gt 10 ]
</code>
==== Opérateurs de comparaison arithmétique ===... ités d’écriture par rapport à la commande test.
<code bash>
# Pas besoin inhiber les caractères '<' et
script les fonctions permettent de factoriser le code. La factorisation regroupe des traitements dans u... unique qu’on utilise à plusieurs reprises dans le code. L'utilisation des fonctions est une bonne pratiq... tantes.
===== Définition d'une fonction =====
<code bash>
# définition en début de ligne,
# mnémoniq... m_fonction
...
# deuxième appel
nom_fonction
</code>
La syntaxe d'appel d'une commande est identique
pour l'affectation d'une valeur à une variable.
<code bash>
# Affectation d'une valeur a une variable
PI=3.14
MSG="Hello Bash"
</code>
<note warning>
Ne pas introduire d'espaces entr... om de celle-ci par le caractère spécial **'$'**
<code bash>
echo $MSG
</code>
Le caractère **$** est spécial, c'est un métacaractère qui indique au shell Ba
et rappeler une commande précédemment invoquée.
<code bash>
# afficher les n dernières commandes invoqu... torique courant
history -r .bash_history.backup
</code>
==== Recherche ====
Pour effectuer une recherc... ne commande, c'est l'expansion de l'historique.
<code bash>
#affiche (sans exécuter) la dernière comman... équivalents
!!:s/--ou/--out/
!-1:s/--ou/--out/
</code>
L'expansion de l'historique permet également de
recherche en la spécifiant un premier argument:
<code bash>
man 1 read
Aucune entrée de manuel pour read en section 1
</code>
On peut définir une liste de sections dans laquelle on souhaite lancer la recherche:
<code bash>
man -S 1,2,8,9 read
</code>
==== Structure d'une page de manuel ====
Une page de manuel contien
-9. |
^ [:graph:] | Correspond aux caractères de code ASCII compris entre 33 et 126.Ce sont les caractè... z. |
^ [:print:] | Correspond aux caractères de code ASCII compris entre 32 et 126. C’est la classe [:... courant dont le nom commence par une majuscule:
<code bash>
ls -l [[:upper:]]*
</code>
Correspond aux chiffres hexadécimaux. Équivalent à 0-9A-Fa-f.
====
teur de ce programme (le programmeur) d’écrire du code qui va interagir directement avec les équipements... me type d’équipement. Car la portabilité d’un tel code (le fait d’assurer son bon fonctionnement pour to... iquée, et le résultat serait un programme dont le code serait volumineux avec le risque d’un nombre impo
le type d'une ou de plusieurs commandes
</note>
<code bash>
$ type ls man date echo
ls est un alias ver... (/usr/bin/date)
echo est une primitive du shell
</code>
Dans l'exemple ci-dessus on utilise la commande