Scripting
Unix VS Linux:
• Unix:
o Payant
o Système propriétaire
• Linux
o S.E Libre basé sur le system Unix
Caractéristique du OS Linux :
• Gratuité du noyau et de certaines application utilisateurs.
• Diffusion ouverte permettant un enrichissement constant.
• Multi-utilisateurs.
• Multitâches.
Shell :
Shell présente une interface entre l'utilisateur et le système d’exploitation.
Ainsi, le Shell est un programme qui permet à l'utilisateur de dialoguer avec le
cœur du système (le noyau).
Commande de base :
date : affiche la date,
cal : affiche le calendrier,
who : affiche les utilisateurs connectés,
whoami : affiche votre nom d'utilisateur,
uname -a : affiche toutes les informations sur le système,
whatis : affiche une description de la commande,
hostname: afficher le nom de la machine,
ls : -l : Lister les information relatives à un fichier ou un répertoire.
-a : Afficher tous les fichiers, y compris les fichiers cachés.
-R : Pour assurer un affichage récursif (le contenu du répertoire et de ses
sous répertoires).
-i : Afficher le numéro d’i-node des fichiers et des répertoires (certaines
informations concernant le fichier)
head -n nbre fichier : afficher les nbre premières lignes du fichier
head -c nbre fichier : afficher les nbre premiers caractères du fichier.
tail -n nbre fichier : afficher les nbre dernières lignes du fichier
tail -c nbre fichier : afficher les nbre derniers caractères du fichier
wc -l fichier : Afficher le nombre de lignes du fichier.
wc -w fichier : Afficher le nombre de mots du fichier.
wc -c fichier : Afficher le nombre d’octets du fichier.
wc -m fichier : Afficher le nombre de caractères du fichier.
paste –d « délimiteur» fichier1 fichier2 : concatène horizontalement chaque
ligne du fichier1 avec la ligne correspondante du fichier2 séparé par « délimiteur
».
paste –s fichier1 fichier2 : concatène verticalement les lignes du fichier 1 avec
les lignes du fichier 2 .
join fichier1 fichier2 : permet du fusionner les lignes de deux fichiers ayant des
champs communs.
grep "pomme" file.txt : Rechercher un mot spécifique
grep -i "bonjour" fichier.txt : Rechercher un motif sans tenir compte de la casse
grep "^Le" fichier.txt : Rechercher des lignes commençant par un mot spécifique
grep "fin$" fichier.txt : Rechercher des lignes se terminant par un mot spécifique
grep -v "erreur" fichier.txt : Rechercher des lignes ne correspondant pas à un
motif
grep "[0-9]" fichier.txt : Rechercher des lignes contenant des chiffres
$# Nombre d’arguments reçus par le script
$0 Le nom du script lui-même (./script.sh)
$1 $2 … $9 ${10} $1 est la valeur du premier argument, $2
la valeur du second…
$* Liste des arguments
Tableau :
• Créer un tableau :
declare -a tab=(valeur0 valeur1 valeur2 ...)
tab(valeur0 valeur1 ...)
tab=([indice0]=valeur0 [indice1]=valeur1 ...)
• Assigner un élément
tab[indice]=valeur
• Affichage des éléments
echo ${tab[indice]}
echo ${tab[*]}
echo ${tab[@]}
• Nombre des indices
echo ${!tab[*]}
• Nombre des éléments
echo ${#tab[*]}
echo ${#tab[@]}
• Ajout au début
tab=( NouvElem ${tab[*]} )
• Ajout à la fin
tab[${#tab[*]}]=NouvElem
Expression :
• Operateurs :
`expr $u + $v`
`expr $u \* $v`
• Longueur d’une chaine :
${#chaine}
`expr length $chaine`
• Longueur de sous-chaînes correspondant à un motif au début
d'une chaîne :
`expr match $chaine $souschaine`
`expr $chaine : $souschaine`
• Position numérique dans $chaine du premier caractère dans
$souschaine qui correspond :
`expr index $chaine $souschaine`
• Extraction d’une sous chaine :
${chaine:position:longueur}
`expr substr $chaine $position $longueur`
• Supprime la correspondance la plus petite de $souschaine à
partir du début de $chaine:
${chaine#souschaine}
• Supprime la correspondance la plus grande de $souschaine à
partir du début de $chaine:
${chaine##souschaine}
• Supprime la correspondance la plus grande de $souschaine à
partir du début de $chaine:
${chaine%souschaine}
• Supprime la plus grande correspondance de $souschaine à
partir de la fin de $chaine:
${chaine%%souschaine}
• Remplace la première correspondance de $souschaine par
$remplacement :
${chaine/souschaine/remplacement}
• Remplace toutes les correspondances de $souschaine avec
$remplacement :
${chaine//souschaine/remplacement}
Test :
• Test sur les fichiers :
test -e <nom_fichier> : vrai si l’argument existe
test -f <nom_fichier> : vrai si l’argument est un fichier
test -d <nom_fichier> : vrai si l’argument est un répertoire
test -r <nom_fichier> : vrai si on a le droit de lire le fichier
test -x <nom_fichier> : vrai si on a le droit d’exécuter le fichier
test -w <nom_fichier> : vrai si on a le droit d’écrire dans le fichier
test -s <nom_fichier> : vrai si l’argument existe et non vide
• Test sur les nombres :
test "i1" -eq "i2": Teste si i1 est égal à i2
test "i1" -ne "i2": Teste si i1 n'est pas égal à i2
test "i1" -gt "i2": Teste si i1 est plus grand que i2
test "i1" -lt "i2": Teste si i1 est inférieur à i2
test "i1" -ge "i2": Teste si i1 est plus grand ou égal à i2
test "i1" -le "i2": Teste si i1 est inférieur ou égal à i2
• Test sur les chaines :
test -n "string" : Teste si la longueur de la chaîne string est différente de
zéro
test -z "string": Teste si la chaîne string est égale à zéro
test "s1" = "s2": Teste si la chaîne s1 est égale à s2
test "s1" != "s2": Teste si la chaîne s1 n'est pas égale à s2
• Test vs []
test –e fichier OR [ –e fichier ]
test $v1 –eq $v2 OR [ $v1 –eq $v2 ]
test $chaine1 = $chaine2 OR [ $chaine1 = $chaine2 ]
• Combinaisons des options
! : Condition Not [ ! –d /etc/group ]
-a : Condition AND [ -f script.sh -a -x script.sh ]
-o : Condition OR [ -d script.sh -o -x script.sh ]
\( \) : pour traiter un groupe d’expressions
[ -w script.sh -a \( -e fich -o -e fich7 \) ]
• Conditionnelles IF
• Conditionnelles Case
• Structure Itérative
• Fonctions :
function nom_fonction { OR nom_fonction() {
Commande... Commande...
} }
• Example Retour d’une fonction:
Max 33 34 #appel de la fonction.
return_val=$?
• Menu :
PS3="Votre choix : "
select item in "- Sauvegarde -" "- Restauration -" "- Fin -"; do
echo "Vous avez choisi l'item $REPLY : $item"
case $REPLY in #vérifier de manière multiple le contenu de REPLAY
1)
echo "Lancement de la sauvegarde";;
2)
echo "Lancement de la restauration";;
3)
echo "Fin du script"
exit ;;
*)
echo "Choix incorrect";;
esac
done
• Menu getops :
while getopts "ab:e:" option; do
echo "getopts a trouvé l'option $option"
case $option in
a)
echo "Exécution des commandes de l'option a"
echo "Indice de la prochaine option à traiter : $OPTIND"
;;
b)
echo "Exécution des commandes de l'option b"
echo "Liste des arguments à traiter : $OPTARG"
echo "Indice de la prochaine option à traiter : $OPTIND"
;;
e)
echo "Exécution des commandes de l'option e"
echo "Liste des arguments à traiter : $OPTARG"
echo "Indice de la prochaine option à traiter : $OPTIND"
;;
esac
done
• La liste des options utilisables avec ce script sont définies à la ligne (getopts
"ab:e:" option).
Il s'agit des options -a, -b et -e.
• Le caractère ":" inscrit après les options " b" et "e" (getopts "ab:e:" option)
indique que
ces options doivent être suivies obligatoirement d'un argument.
• La variable "option" (getopts "ab:e:" option) permet de récupérer la valeur de
l'option en
cours de traitement par la boucle while.
• La variable réservée "$OPTIND" contient l'indice de la prochaine option à traiter.
• La variable réservée "$OPTARG" contient l'argument associé à l'option