outil de vérification de la syntaxe -> ShellCheck
visualiser le Shell dans lequel on travaille
echo $0
shebang : #!bin/bash
edition script
nano nom_script.sh
donner pouvoir d’éxé
chmod +x nom_script.sh
execution script (se déplacer dans le dossier du script)
./nom_script.sh
variables
declaration : dossier=/data/projet
var= ‘il faut mettre des guillemets ou des apostrophes si il y a des espaces’
appeler une variable -> $var
typeset [-a] [-i] [-r] [-x] var1 [var2 ?]
-a var : la variable sera traitée comme un tableau.
-i var : la variable sera traitée comme un entier et peut être incluse dans des opérations arithmétiques.
-r var : la variable sera mise en « lecture seule » (équivalent de « readonly »).
-x var :la variable sera exportée automatiquement dans les processus fils (équivalent de « export »).
$? : commande de code retour
permet d’obtenir des informations concernant la commande exécutée précédemment :
echo $? ( 0 -> succès)
$@ ou ${a} : se developpe en liste de tous les parametres
comparaison et operateurs logiques
= (identique) / != (different)
le et logique : -a = && / & / +
le ou logique : -o = || / |
le non logique : !
nt / ot : plus recent / plus ancien
-e nom_fichier -> vérifier si fichier existe
-d nom_dossier -> vérifier si dossier existe
comparateurs numeriques :
eq / ne : = / different
lt / le : < / < ou = gr / ge : > / > ou =
cmd composées
; |
action_1 || action_2 -> cmd2 effectuée uniquement dans le cas où la première est en échec
Deux commandes séparées par « && » signifie que la seconde commande est effectuée .
action_1 && action_2 -> cmd2 uniquement dans le cas où la première est réussie
demander saise utilisateur : read
read prenom -> « prenom » sera defini comme une variable
fonctions
nom_fonction(){
instructions
}
conditions : if (else facultatif)
if [ condition ] if [ -e « $fichier » ]
then then
actions echo « le fichier existe »
esle fi
actions
fi
elif
if [ condition ]
then
actions
elif [ condition2 ]
then
actions
else
actions
fi
case
case « valeur » in
cas1) action1;;
cas2) action2;;
cas3) action3;;
esac
boucles for: parcourir une liste (itération des éléments)
for élément in liste for i in {1-5}
do do
Actions_à_faire echo « Etape n° $i »
done done
for fichier in /home/flo/Documents/*.txt
do
echo « $fichier : $(cat $fichier | wc -l) ligne(s) »
done
while exécutée tant que l’argument est vrai
while [ test ] ; do
Actions_àfaire_1 Actionà_faire_2 ;
done
until exécutée jusqu’à ce que l’argument soit vrai
until test ; do
Actions_àfaire_1 Actionà_faire_2 ;
done
« $(systemctl is-active ) » lorsqu’un statut est actif, retourne la valeur « active » EX :
Etat du service SSH
ServiceSSH=$(systemctl is-active ssh)
Etat du service Apache2
ServiceApache2=$(systemctl is-active apache2)
Déterminer si les services sont actifs
if [ $ServiceSSH = « active » ] && [ $ServiceApache2 = « active » ]
then
echo « Les deux services sont en cours d’exécution »
else
echo « ERREUR ! Statut SSH : $ServiceSSH – Statut Apache2 : $ServiceApache2 »
fi
substitution
mv « $fichier » « ${fichier///-} » « // » indique que toutes les occurrences de la chaîne doivent être remplacées. « » est la chaîne à remplacer.
« – » est la chaîne de substitution
command <<< « text » alternative élégante pour les cas où le texte à traiter est une simple chaîne
Afin de détecter l’erreur, le Shell offre un outil de débogage. Il s’agit de l’instruction « set » agrémentée d’une ou plusieurs options suivantes :
v : affichage de chaque instruction avant analyse => il affiche le nom des variables ;
x : affichage de chaque instruction après analyse => il affiche le contenu des variables ;
e : sortie immédiate sur erreur.
Chaque instruction « set -… » active l’outil demandé qui sera désactivé par l’instruction « set +… ». On peut ainsi activer le « traqueur » sur une portion précise du programme source.
sh -n nom_du_fichier ou bash -x chemin_du_fichier
vérifie la syntaxe de toutes les commandes du script
Tableaux.
variable[n]=chaîne
prenom=(Pim Pam Poum) # Affectation de 3 prénoms dans un tableau
echo « Mon tableau de prénoms contient ${prenom[@]} »
Il est possible de remplir en une seule instruction les « n » premiers éléments du tableau en utilisant la syntaxe « variable=(chaîne1 chaîne2 …) ». Le texte « chaîne1 » ira dans la variable « variable[0] », le texte « chaîne2 » ira dans la variable « variable[1] », …
L’accès au contenu de la variable d’indice « n » s’obtient en encadrant le nom de la variable indicée par des accolades « { } » et en faisant précéder le tout du caractère « $ ».
Si on remplace la valeur de l’indice par le caractère « * », le Shell concaténera tous les éléments du tableau en une chaîne unique et renverra cette dernière. Et si on remplace la valeur de l’indice par le caractère « @ », le Shell transformera chaque élément du tableau en chaîne et renverra ensuite l’ensemble de toutes ces chaînes concaténées. Visuellement, il n’y a aucune différence dans le résultat entre l’utilisation des caractères « * » ou « @ ».
${var-texte} : renvoie le contenu de la variable « var » si celle-ci est définie (existe en mémoire) ; sinon renvoie le texte « texte »
${var:+texte} : renvoie le texte « texte » si la variable « var » est définie et non vide ; sinon ne renvoie rien
${var?texte} : renvoie le contenu de la variable « var » si celle-ci est définie ; sinon affiche le texte « texte » comme message d’erreur
${var[n]} : renvoie le contenu du nie élément du tableau « var »
read [var1 var2 ?]
read -a tableau (affecter automatiquement chaque mot en provenance du fichier standard d’entrée dans les éléments d’un tableau. Le premier mot ira dans le tableau d’indice « 0 »)
$EUID id unique du user (root = 0)
$HOME Répertoire personnel de l’utilisateur
$PWD ($OLDPWD) Répertoire courant (avant dernier cghgmt de rep)
$LOGNAME = $USER = $USERNAME Nom de login
$PATH Chemins de recherche des commandes
$CDPATH Chemins de recherche du répertoire demandé par la commande « cd »
$PS1 Prompt principal (invite à taper une commande)
$$ Numéro du processus courant
$! Numéro du dernier processus lancé en arrière-plan
$? Statut (état final) de la dernière commande
$0 contient le nom du script
$* contient tous les arguments passés à la fonction
$n contient l’argument n, n étant un nombre
basename -> extrait uniquement la dernière partie du chemin
$(basename $user)
« sous-exécution » : remplacer une partie du script par le texte qu’une commande affiche normalement à l’écran
$($(commande)) (ou bien var1=echo Salut)
laisser le curseur sur la même ligne, l’utilisateur tape la réponse à la suite :
echo -n
extraire une chaîne d’une chaîne on utilise :
${ chaîne : position : nombre de caractères }
Dans la partie chaîne pour faire référence à une variable on ne met pas de $ !
$(date ‘+%Y-%m-%d à %H:%M:%S’)
obtenir chemin binaire complet (ex cmd « rm ») :
whereis rm
which nano #trouver le chemin vers le binaire de nano
copier dans nano (core)
Copier cette sélection avec Alt + ^
En Bash, l’opérateur &> est une forme de redirection utilisée pour rediriger à la fois la sortie standard (stdout) et la sortie d’erreur (stderr) vers le même fichier ou destination (equivalent à 2>&1) :
syntaxe : commande &> fichier
‘>’ redirige la sortie standard (stdout)
‘&>’ redirige stdout et stderr
‘2>’ redirige uniquement stderr
