Un mémo sur les commandes utiles pour créer un script Bash.
Pour affecter le résultat d'une commande shell, on peut utiliser $(
ou
ou encore mieux, pour respecter les retours chariot si la variable en contient :
-> Renvoie "4" si a="test"
Il faut utiliser les expressions : ${variable:position} ou ${variable:position:longueur}
-> Renvoie "st" si a="test", car renvoie les X derniers caractères.
-> Renvoie "es" si a="test" car la sous-chaîne commence à 0.
-> Incrémente la variable i de 1
-> Affiche les 2 éléments du tableau
L'expression suivante peut être utilisée pour remplacer directement des caractères, en recherchant/remplaçant la première occurrence trouvée : ${variable/recherche/remplace}
-> Affiche "czci est une valeur"
Pour effectuer plusieurs remplacements, ajouter un second slash après le nom de la variable : ${variable//recherche/remplace}
Par la substitution, on peut convertir en majuscule une variable :
Ainsi qu'en minuscules :
Il existe des variables déjà prédéfinies par l'interpréteur bash, dont les plus intéressantes sont :
| Nom | Description |
|---|---|
| $HOME | Répertoire personnel de l'utilisateur |
| $PATH | Valeur de la variable d'environnement PATH, qui contient les chemins de recherches |
| $$ | PID du processus |
| $PPID | PID du processus parent |
| $I | PID du processus enfant |
| $PWD | Répertoire actuel (peut être différent du répertoire du script) |
| $SECONDS | Nombre de secondes écoulées depuis le démarrage du script |
| $? | Code retour de la dernière commande lancée |
Pour effectuer un calcul, il faut l'encadrer par les balises : $(( <calcul> ))
ou
Remarques :
Attention à bien respecter les espaces avant et après les crochets ainsi que avant et après les signes "==" !
ou
| Opérateur | Description | Exemple |
|---|---|---|
| = | Egalité | if [ ma_variable = "b" ] |
| != | Différence | if [ ma_variable != "b" ] |
| -z | Est vide | if [ -z ma_variable ] |
| -n | Est non vide | if [ -n ma_variable ] |
| Opérateur | Description | Equivalent mathématique | Exemple |
|---|---|---|---|
| -eq | Egalité | = | if [ var1 -eq var2 ] |
| -ne | Différence | <> | if [ var1 -ne var2 ] |
| -gt | Supérieur (greater than) | > | if [ var1 -gt var2 ] |
| -ge | Supérieur ou égal (greater or equal) | >= | if [ var1 -ge var2 ] |
| -lt | Inférieur (lesser than) | < | if [ var1 -lt var2 ] |
| -le | Inférieur ou égal (lesser or equal) | <= | if [ var1 -le var2 ] |
La commande case <variable> in permet d'effectuer un traitement selon une valeur. Voici un exemple :
Il est possible de tester plusieurs variables, comme ceci :
On peut utiliser les fonctions logiques NON, ET, OU avec les comparaisons. A noter que pour les opérateurs logiques ET et OU, où on combine les conditions, il faut doubler les crochets.
| Fonction | Description | Exemple |
|---|---|---|
| ! | NON : inverse le sens du test | if [ ! ${a} = ${b} ] |
| && | ET : combine plusieurs conditions obligatoires | if [[ ${a} = ${b} && ${b} = ${c} ]] |
| || | OU : combine plusieurs conditions optionnelles | if [[ ${a} = ${b} || ${b} = ${c} ]] |
Dans le cas ci-dessus, on utilise la commande seq, qui crée une séquence de 1 à 5.
Il faut utiliser -nt et -ot entre deux fichiers pour comparer les dates de modification de deux fichiers :
Si vous avez appelé un programme, vous pouvez récupérer son code retour juste après son exécution et le renvoyer à l'appelant, comme ceci :
Si vous souhaitez écrire la valeur d'une variable sur plusieurs lignes, suffixez chaque ligne par "\", comme ci-dessous :
| | |