GNU/Linux >> Tutoriels Linux >  >> Linux

Script bash (I)

Ceci est le premier article d'une série axée sur les scripts Gnu Bash. Ce n'est pas un cours complet sur la programmation bash, mais à la fin, vous devriez apprendre une ou deux choses. Je veux dire, des choses utiles qui vous faciliteront la vie.

La paresse est la clé du succès

Parfois, j'ai besoin d'exécuter la commande1, suivie de la commande2, puis de la commande3 et enfin de la commande4. Au bout d'un moment, j'ai besoin de répéter cette séquence de commandes. Mais comme je suis très intelligent, j'ai parcouru l'historique des commandes avec la touche fléchée vers le haut pour ne pas recommencer.

Puis, après un certain temps, je dois le refaire, et je sais que je devrai le refaire plusieurs fois à l'avenir. Par exemple, chaque jour, vous démarrez votre ordinateur, vous connectez à votre Linux basé sur Debian et vérifiez les mises à jour de paquets :

# apt-get update
(...)
# apt-get upgrade
(...)
# apt-get dist-upgrade

Au lieu de taper ces 52 caractères à chaque fois, vous pouvez les mettre dans un script comme celui-ci :

#!/bin/bash
#this is not a Hello world
apt-get update
apt-get upgrade
apt-get dist-upgrade

Vous pouvez enregistrer ce script sous "up.sh" et le lendemain matin après votre connexion, exécutez simplement :./up.sh . Juste comme ça, vous avez enregistré 44 frappes, vous devenez paresseux ou quoi ?.

Non, nous ne le sommes pas, si vous essayez d'exécuter "tel quel", vous obtiendrez une belle erreur d'autorisation refusée . C'est parce que je n'ai jamais dit de définir l'autorisation d'exécution :

# chmod +x up.sh

Plus tard, je vous montrerai comment être encore plus paresseux.

Outre les commandes sur les dernières lignes, vous avez remarqué le caractère numérique (#) sur les deux premières lignes. La toute première ligne s'appelle shebang et indique au système quel interpréteur utilise pour exécuter les commandes sur le script.

Le second n'est qu'un commentaire et vous pouvez le mettre partout :ce qui se cache derrière ce signe sera ignoré. Par exemple :

# this is a comment
command1 # this also is a comment. Should explain what that command do
#command2. # This was command... but as was commented out, bash would ignore it

Il est important (pour moi du moins) d'ajouter au moins quelques commentaires pour vous rappeler ce que fait le script et pourquoi. Également, dans les gros scripts, pour ajouter des commentaires pour expliquer des blocs, des sections ou des parties du script. Les commentaires vous aideront lorsque vous reviendrez à votre script quelques mois, semaines, voire jours plus tard.

Devenir plus paresseux

Il n'est pas nécessaire de taper à chaque fois que nous nous connectons à nos systèmes. Nous pouvons faire en sorte que l'ordinateur exécute ce script pour nous. Vous pouvez ajouter la ligne "./up.sh ” à l'un des endroits suivants :

  • .bashrc . Cela exécutera le script chaque fois que vous lancerez un shell sans connexion (c'est-à-dire le terminal inclus sur votre bureau, comme xterm)
  • .bash_profile Ceci est pour le shell de connexion, par exemple lorsque vous tapez votre utilisateur et votre mot de passe sur la console ou que vous vous connectez à votre système via ssh.
  • .xinitrc comme .bashrc mais pour les sessions graphiques. Vous utilisez probablement un bureau moderne avec ses propres outils pour démarrer automatiquement les applications, utilisez-les.
  • une entrée dans votre fichier crontab, donc il s'exécute périodiquement.

Variables

Nous avons besoin de "quelque chose" pour stocker des valeurs, par exemple une entrée utilisateur, un paramètre de la ligne de commande. Ce « quelque chose » est une variable. Au fait, je suppose que vous savez déjà ce qu'est une variable.

Pour déclarer une variable, vous pouvez

  • attribuer une valeur à un nom de variable. Exemple :x=1
  • saisissez l'utilisateur pour une valeur avec la commande de lecture :read x
  • un paramètre de la ligne de commande. J'y reviens très bientôt
  • il existe d'autres façons de définir une variable que nous verrons plus tard

Pour "appeler" une variable, tapez le signe dollar suivi du nom de la variable. Par exemple si on veut imprimer à l'écran la valeur de la variable $x :

echo "x value: $x"
echo "Type y vaue:"
read y
echo "You typed: $y"

Les paramètres de la ligne de commande sont stockés dans des variables numérotées. Par exemple, utilisez le premier argument, appelez la variable $1. Pour le 2e, appelez 2 $. Etc. La variable $0 stocke le nom du fichier de script. Dans mon premier exemple not-a-hello-world, la valeur de $0 est "up.sh".

Tableaux

Les tableaux sont définis de la même manière, mais avec les valeurs entre parenthèses. Comme ceci :

array=(uno dos tres)

Vous pouvez ajouter ultérieurement d'autres valeurs au tableau avec l'index entre crochets :

array[3]=cuatro

Vous pouvez "appeler" un élément de tableau avec des accolades pour le nom du tableau et des crochets pour la position de l'élément (commençant par 0) :

$ echo ${array[0]}
uno

Si vous n'utilisez pas l'accolade, bash affichera une [position de l'élément] littérale, par exemple :

$ echo $array[0]
uno[0]

Vous pouvez appeler tout le tableau avec un @ comme index comme ceci :

$ echo ${array[@]}
uno dos tres cuatro

Enfin, vous pouvez obtenir le nombre d'éléments d'un tableau avec le signe dièse (le même que j'ai dit avant que ce soit pour les commentaires) comme ceci :

echo ${#array[@]}
4

Il y a beaucoup d'autres choses que nous pouvons faire avec les tableaux et d'autres types de tableaux, comme les tableaux associatifs. Mais cela suffit pour aujourd'hui.

Restez à l'écoute

Jusqu'à présent, je n'ai rien montré de très "woaaah “. Il n'y a même pas une seule capture d'écran dans cet article. Mais mon intention vers la fin de cette série - peut-être trois articles ou plus - est de donner des outils pour faire quelque chose d'utile. Je ne sais pas si vous deviendrez un gourou des scripts bash, mais vous pouvez essayer 😉

Dans le prochain, je couvrirai certaines structures de contrôle, pipelines et redirection. En attendant, vous pouvez consulter la page de manuel de bash, mais au moins pour moi, c'est un peu déroutant


Linux
  1. Bash Dynamic (variable) Noms des variables ?

  2. Comment comparer des chaînes dans les scripts shell bash

  3. Alias ​​avec variable dans bash

  4. Vérifier si une variable existe dans une liste dans Bash

  5. passer grep dans une variable bash

Script Bash - Manipulation de chaînes

Bash Scripting - Déclaration de cas

Script bash (II)

Script bash (III)

Comment définir une variable d'environnement dans Bash

Bash Beginner Series #2 :Comprendre les variables dans les scripts shell Bash