Bash linux 9 : Ecrire des scripts sous bash

in #utopian-io8 years ago

Ecrire des scripts sous bash

Introduction

This article is an introduction to Bash Scripting , this concept will be illustrated with exemples that are supposed to clarify Bash scripts on Linux .Le code :

Qu'est ce que c'est un bash script?

Un bash script nous permet de définir une série d'actions que l'ordinateur va performer sans notre intervention. Dans le cas d'une tâche particulière qui est souvent traitée ou répétitive, le script est utile.

le Bash script est interpreté par un interpreteur. Il existe une variété d'interpreteurs sur un système Linux, dans cette section, on va uniquement apprendre les Bash scripts vu qu'on a parlé uniquement du Bash shell.

Vous pouvez placer dans un script tout ce que vous pouvez exécutez sur une ligne de commande car le résultat ne changera pas et vice-versa.

l'énoncé ci-dessous est important pour comprendre quand on a besoin de créer des scripts. Quand vous testez différentes parties de votre scripts, il est souvent plus facile d'exécuter vos commandes directement sur la ligne de commande.

Un script est un fichier texte brut et peut avoir n'importe quel nom on choisit. on peut le créer tout comme on crée un fichier texte ordinaire, avec un éditeur de texte brut(comme vi).

Un simple exemple

Ci-dessous un simple script, je vous recommande de créer un fichier similaire et l'exécuter pour savoir comment ça marche. le script va écrire un message sur l'écran( en utilisant le programme echo)puis va nous lister ce qui se trouve dans le repertoire courant.

cat monscript.sh
#!/bin/bash
# Une simple démonstration du scipt
# john 0!/11/2015
echo voici les fichiers qui se trouvent dans votre répertoire courant
ls
user@bash:
user@bash:ls -l monscript.sh
-rwxrwx--x 1 john users 5.6K 2017 monscript.sh
user@bash:./monscript.sh
voici les fichiers qui se trouvent dans votre répertoire courant
barry.txt bob example.png firstfile foo1 myoutput video.mpeg
user@bash:
  • La ligne 1 - Linux est un système qui n'a pas besoin d'extension pour identifier un fichier. Mais il est courant d'ajouter l'extension .sh pour pouvoir les identifier facilement.

  • La ligne 2- La première ligne du script doit toujours être cette ligne!/bin/bash). Cette ligne identifie l'interpreteur qui va être utilisé. pour un script en shell bash, la première ligne de commande est appelée la ligne Shebang, elle se présente ainsi:

    #!/bin/bash
    
  • Les lignes 3 et 4- tout ce qui suit # est un commentaire. L'interpreteur ne va pas exécuter ça. c'est généralement utile pour faire une description de votre script.

  • La ligne 6 - on va utiliser un programme appelé echo qui va simplement nous réecrire tout ce qui vient après echo, comme arguments de ligne de commande sur l'écran.

  • La ligne 7-la prochaine étape de notre script est d'afficher le contenu de notre répertoire courant.

  • La ligne 12- on exécute maintenant le script, on expliquera plus tard pourquoi on a besoin de ./.

  • Les lignes 13 et 14 -la sortie de l'exécution de notre script.

Quelques points importants

Le Shebang

la première ligne du script indique au système l'interpreteur qu'on va utiliser pour un fichier. Il est important de ne pas mettre des espaces dans cette ligne. Les deux premièrs caractères #! (le shebang) informe le système que juste après il y'aura un chemin d'accès à l'interpreteur. Si on ignore ce chemin d'accès, on utilisera le programme which pour le découvrir.

user@bash: whish bash
/bin/bash
user@bash:
user@bash: which ls
/utilisateur/bin/ls
user@bash:

Le nom

Linux est un système qui n'a pas besoin d'extension pour identifier le type du fichier. On peut alors donner n'importe quel nom on veut à notre script.

Les commentaires

Les commentaires ne sont que des notes dans le script qui n'ajoutent rien au script mais qui vous est utile. Tout ce qui vient après (#) est un commentaire.

user@bash: cat monscript.sh
#!/bin/bash
# un commentaire qui continue sur toute la ligne
ls # un commentaire à la fin de la ligne

Pourquoi le ./?

Quand on saisi une commande sur la ligne de commande, le système passe par des répertoires prédéfinis, en cherchant le programme qu'on lui a demandé. On peut découvrir ces répertoires en utilisant la variable PATH.

user@bash: echo $PATH
utilisateur/local/bin:/utilisateur/bin:/bin:/utilisateur/bin.......
user@bash:

Le système va chercher dans le premier répertoire, s'il ne trouve pas le programme qu'on veut exécuter il passe au suivant jusqu'à ce qu'il trouve le bon répertoire, les répertoires sont séparés par deux points (:).

Le système ne va regarder que ces répertoires, il ne regardera même pas le répertoire courant. On peut modifier ce comportement en ajoutant un chemin d'accès, alors quand on dit ./monscript.sh , on indique au système qu'il faut chercher dans le répertoire courant pour trouver le script. On peut également utiliser un chemin d'accès absolu ou un chemin relatif si on ne se trouve pas dans le même répertoire du script.

Il serait plus facile s'il est possible d'exécuter votre script dans votre répertoire courant sans recourir à ce mécanisme.

Permissions

Un script doit avoir la permission d'exécuter avant de l'exécuter (même si on est le propriétaire du fichier). Pour des raisons de sécurité, par défaut, vous n'avez pas la permission de l'exécution, vous devez alors l'ajouter. Chmod 755 < script > est une bonne commande pour autoriser l'exécution de votre script.

Variables

les variables sont fait pour contenir une simple partie des informations. Elles ont un syntaxe particulier qu'on doit suivre .

  • Quand on crée une variable; on indique son nom, suivi directement par égale(=),suivi directement par la valeur.
  • quand on réfère à une variable, on doit mettre un dollar ($) juste avant le nom de la variable.

Un simple exemple.

user@bash: cat exvariable.sh
#!/bin/bash
# simple démonstration sur les variables
# john 0!/11/2015
name= 'john'
echo Hey $name
user@bash:
user@bash:./exvariable.sh
Hey john
user@bash:

Des arguments de ligne de commandes et encore plus

Quand on exécute un script, il y'a beaucoup de variables qui sont définis automatiquement. voici quelques exemples:

  • $0- le nom de script.
  • $0-$9-tout argument de ligne de commande donné au script. $1 est le premier argument, $2 est le deuxième argument et ainsi de suite.
  • $#-combien de lignes de commande ont été données au script.
  • $*-tous les arguments de ligne de commande.
user@bash; cat exvariable.sh
#!/bin/bash
# simple démonstration sur les variables
# john 0!/11/2015
echo Mon nom est $0 et on m'a donné $# arguments de ligne de commande
echo ici il y'a $*
echo le deuxième argument de ligne de commande est $2
user@bash:
user@bash:./exvariable.sh marie norah nick
Mon nom est exvariable.sh et on m'a donné 3 arguments de ligne de commande
ici il y'a: marie norah nick
le deuxième argument de ligne de commande est norah

La quote inverse (`)

Il est possible de sauvegarder la sortie de la commande dans une variable et le mécanisme utilisé pour cela est (`), voici un exemple.

user@bash: cat quoteinverse.sh
#!/bin/bash
# simple démonstration sur les variables
# john 0!/11/2015

nlignes= ` cat $1 | wc -l `
echo le nombre des lignes dans ce fichier $1 est $lignes
user@bash: ./quoteinverse.sh fic.txt
le nombre des lignes dans ce fichier fic.txt est 10
user@bash: 

Un simple script de sauvegarde

user@bash: cat projetsdesauv.sh
#!/bin/bash
# sauvegarde d'un un simple répertoire projet
# john 0!/11/2015

date=`date +%F`
mkdir ~/projetsdesauv/$1_$date
cp -R ~/projets/$1 ~/projetsdesauv/$1_$date
echo sauvegarde de $1 accomplie
user@bash:
user@bash: ./quoteinverse.sh these
sauvegarde de these accomplie
user@bash:

Vous avez remarqué qu'on a utilisé des chemins d'accès relatifs dans le script ci-dessus pour rendre le script plus général. Si par exemple un collègue souhaite l'utiliser on lui passera une copie et cela doit aussi marcher pour lui sans modification.

Les instructions if

user@bash: cat projetsdesauv.sh
#!/bin/bash
# sauvegarde d'un un seul répertoire projet
# john 0!/11/2015
f [ $# != 1 ]
then
    echo Usage: un seul argument qui est le répertoire vers sauvegarde  
    exit
fi
if [ ! -d ~/projets/$1 ]
then
    echo 'le repertoire donné n existe pas '
    exit
fi
date=`date +%F`
 
# est ce qu'on a déjà un dossier de sauvegarde pour la date d'aujourd'hui?
if [ -d ~//$1_$date ]
then
    echo 'This project has already been backed up today, overwrite?'
    read answer
    if [ $answer != 'y' ]
    then
        exit
    fi
else
    mkdir ~/projetsdesauv/$1_$date
fi
cp -R ~/projets/$1 ~/projetsdesauv/$1_$date
echo Backup of $1 completed
echo sauvegarde de $1 accomplie
user@bash:
  • La ligne 6 notre première instruction if. le formatage est important. Dans cette instruction, on demande le nombre d'arguments($#) qui n'est pas égale à 1.
  • La ligne 8 sinon le script n'est pas appelé correctement. Ecrire un message pour expliquer comment il doit être utilisé.
  • La ligne 9 on souhaite quitter le script avant d'aller plus loin.
  • La ligne 10 pour indiquer la fin de l'instruction if ,pour cela, on écrit fi.
  • La ligne 11 les instructions if peuvent tester beaucoup de choses . Ici le point d'exclamation veut dire non, -d veut dire" le chemin d'accès existe et il s'agit d'un répertoire ( le répertoire donné n'existe pas).
  • La ligne 22 Il est possible de demander à l'utilisateur une sortie, la commande utilisée pour cette fin est read.
  • La ligne 23 on va voir comment l'utilisateur a répondu et on va réagir selon la réponse.



Posted on Utopian.io - Rewarding Open Source Contributors

Sort:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @raptorjesus I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x

Coin Marketplace

STEEM 0.13
TRX 0.33
JST 0.034
BTC 110836.75
ETH 4311.34
USDT 1.00
SBD 0.82