*** Exercice 1 *** Q 1.1 ./test_args.sh a été appelé avec 1 arguments argument 1 = un argument 2 = Q 1.2 ./test_args.sh a été appelé avec 4 arguments argument 1 = un argument 2 = deux *** Exercice 2 *** * ligne 3 (./test_export.sh) : Votre UID : 1000 X vaut '' et Y vaut '' (UID est une variable d'environnement et X et Y n'ont pas été exportées dans le terminal bash. Elles ont donc un contenu vide.) * ligne 5 (./test_export.sh) : Votre UID : 1000 X vaut 'machin' et Y vaut '' (X a été exportée dans le terminal mais Y, toujours pas. Le script hérite donc de la variable X uniquement.) * ligne 6 (echo $X) machin (Le script a exécuté X=untruc mais il a modifié sa copie de la variable X et pas celle du terminal. X contient donc toujours machin (valeur de X dans le terminal suite à l'exécution de la ligne 1).) * ligne 7 (echo $Z) aucun affichage (Le script a exporté Z mais c'est valable uniquement pour les processus fils lancés par le script. Or le terminal est le père du script lancé à la ligne 5 et les variables exportées ne se transmettent pas du fils au père. Dans le terminal la variable Z n'existe donc pas. Rien n'est donc affiché.) *** Exercice 3 *** Q 3.1 - Lit deux lignes au clavier puis les affiche dans l'ordre inverse. Q 3.2 - Écrit deux lignes (la première contenant "deux" et la deuxième contenant "un") dans le fichier sortie. Q 3.3 - Écrit deux lignes (la première contenant "un" et la deuxième contenant "deux") dans le terminal. Q 3.3 - Écrit deux lignes (une première ligne vide et une deuxième ligne "truc") dans le terminal. Q 3.5 - Écrit deux lignes (la première contenant "read X" et la deuxième contenant "#!/bin/bash") dans le terminal. Q 3.6 - Écrit deux lignes (la première contenant "read X" et la deuxième contenant "#!/bin/bash") dans le fichier sortie. *** Exercice 4 *** Q 4.1 - ${d:0:4} Q 4.2 - ${d:4:2} Q 4.3 - ${d:9} *** Exercice 5 *** Q 5.1 - ${adr%@*} Q 5.2 - ${adr#*@} Q 5.3 - ${adr##*.} Q 5.4 - ${adr//@*/@XXX} Q 5.5 - ${adr//a?/a} *** Exercice 6 *** #!/bin/bash i=$1 j=$2 if [ $i -lt $j ] then echo inf elif [ $i -gt $j ] then echo sup else echo eq fi *** Exercice 7 *** #!/bin/bash if [ $USER = root ] then echo "ce script ne doit pas être lancé par root" > /dev/stderr exit 1 fi if [ $# != 1 ] then echo "ce script doit être appelé avec un unique argument" > /dev/stderr exit 2 fi if ! [ -d $1 ] || ! [ -w $1 ] then echo "l'argument doit être un répertoire modifiable" > /dev/stderr exit 3 fi *** Exercice 8 *** for service in ssh dhcpd httpd do systemctl start $service.service done *** Exercice 9 *** #!/bin/bash while IFS=':' read login x uid reste do if [ $uid -ge 1000 ] then echo $login fi # ou plus simplement : # [ $uid -ge 1000 ] && echo $login done < /etc/passwd *** Exercice 10 *** L'exécution affichera : dans f: x = (L'instruction "local x" à la ligne 3 dans f crée une nouvelle variable différente de celle créée à la ligne 9 et qui contient une chaîne de caractères vide.) dans f: y = à toi (Par contre, y n'est pas locale dans f. Quand on manipule y dans f, on manipule la même variable que celle initialisée à "à toi" à la ligne 10.) après f: x = truc (Une fois la fonction f terminée, la variable x locale est détruite. x retrouve alors la valeur qui lui avait été donnée avant d'appeler la fonction, soit "truc" à la ligne 9, et pas "machin" à la ligne 7.) après f: y = salut à toi (Par contre, la modification de y dans f à la ligne 6 est visible une fois f terminée toujours pour la raison que y n'est pas locale dans f.)