Vous êtes sur la page 1sur 7

24/09/2023 18:03 TP03 : Shell Bash · GitHub

Instantly share code, notes, and snippets.

bretznerR / TP03_Unix.md
Last active 5 years ago

Star

Code Revisions 3

TP03 : Shell Bash

TP03_Unix.md

TP 03 : Shell bash

Exercice : paramètres
Ecrire un script affichant le nombre de paramètres, le nom du script, la valeur du troisième
paramètre ainsi que celle de tous les paramètres.

On utilise succesivement les variables $# , $0 , 3,@.

#!/bin/bash
#Bretzner Raphaël
echo "Bonjour, vous avez rentré $# paramètres"
echo "Le nom du script est $0"
echo "Le 3ème paramètre est $3"
echo "Voici la liste des paramètres : $@"

Exercice : verification du nombre de paramètres


Ecrire un script qui concatène les deux paramètres et affiche une erreur si le nombre de
paramètre ne vaut pas 2.

On vérifie tout d'abord avec une condition si l'utilisateur a rentré deux arguments. Si c'est
le cas, on stocke dans une variable CONCAT le premier arguments ($1) et le deuxième ($2).
Puis on l'affiche.

#!/bin/bash
#Bretzner Raphaël
if [ $# -eq 2 ]
https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 1/7
24/09/2023 18:03 TP03 : Shell Bash · GitHub

then
CONCAT="$1$2"
echo $CONCAT
else
echo "Erreur, vous devez rentrer 2 paramètres."
fi

Exercice : argument type et droits


Creer un script qui precisera le type du fichier passe en paramètre, ses permissions d’accès
pour l’utilisateur, ou s’il n’existe pas.

Check que l'utilisateur ai entré un argument. Si oui : Check le type du fichier dont le nom a
été saisi en argument, et on stocke son type (répertoire/fichier ordinaire) dans une variable
Affiche après le check. Plusieurs tests de suite pour vérifier les permissions du fichier
(lecture, écriture, execution) en les concaténant à chaque fois dans une variable On affiche
après cette série de test le contenu de la variable.

#!/bin/bash
#Bretzner Raphaël
if [ $# -eq 1 ]
then
if [[ -d $1 ]]
then
path_file="répertoire"

elif [[ -f $1 ]]
then
path_file="fichier ordinaire"
if [ -s $1 ]
then
path_file="$path_file qui n'est pas vide"
else
path_file="$path_file vide"
fi

else
echo "$1 n'est pas valide"
exit 1
fi

echo "Le fichier $1 est un $path_file"

if [ -r $1 ]
then
permission="lecture"
fi
if [ -w $1 ]
then
permission="$permission écriture"

https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 2/7
24/09/2023 18:03 TP03 : Shell Bash · GitHub

fi
if [ -x $1 ]
then
permission="$permission exécution"
fi

echo "$0 est accessible par $USER en $permission"


else
echo "Erreur, vous devez rentrer 1 paramètres."
fi
then
fichier_type_string="fichier ordinaire"
if [ -s $1 ]
then
fichier_type_string="$fichier_type_string qui n'est pas vide"
else
fichier_type_string="$fichier_type_string vide"
fi
else
echo "$1 n'est pas valide"
exit 1
fi
echo "Le fichier $1 est un $fichier_type_string"
if [ -r $1 ]
then
permission="lecture"
fi
if [ -w $1 ]
then
permission="$permission écriture"
fi
if [ -x $1 ]
then
permission="$permission exécution"
fi
echo "$0 est accessible par $USER en $permission"
else
echo "Erreur, vous devez rentrer 1 paramètres."
fi

Exercice : Afficher le contenu d’un repertoire

Ecrire un script bash permettant d’afficher le contenu d’un repertoire en separant les
fichiers et les (sous)repertoires.

Check s'il n'y a qu'un seul paramètre. Si oui, check si celui correspond bien à un nom de
répertoire. Si c'est le cas, on parcours la liste des fichiers "simples" du répertoire à l'aide
d'une boucle "for" et on les affiche. On fait de même pour les répertoires.

#!/bin/bash
#Bretzner Raphaël

https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 3/7
24/09/2023 18:03 TP03 : Shell Bash · GitHub

if [ $# -eq 1 ]
then
if [[ -d $1 ]]
then
echo "####### fichiers dans $1"
for file in "$1"*
do
if [[ -f "$file" ]]
then
echo $file
fi
done
echo "####### repertoires dans $1"
for file in "$1"*
do
if [[ -d "$file" ]]
then
echo $file
fi
done
else
echo "Erreur, vous devez rentrer un répertoire et non un fichier
ordinaire"
fi
else
echo "Erreur, vous devez rentrer 1 paramètres."
fi

Exercice : Lister les utilisateurs


Ecrire un script bash affichant la liste des noms de login des utilisateurs definis dans
/etc/passwd ayant un UID superieur à 100.

Check dans un premier temps qu'il n'y ai pas de paramètres. Si ok, on parcours, avec awk,
les lignes du fichier /etc/passwd, qui correspondent chacune à un utilisateur. On effectue
une condition pour vérifier le 3ème élément (UID), soit supérieur ou égal à 100. Si la
condition est respectée on affiche le nom de l'utilisateur et son UID.

#!/bin/bash
#Bretzner Raphaël
if [ $# -eq 0 ]
then
awk -F':' '$3>99 {print User $1 " UID: " $3}' /etc/passwd | column -t |
grep -v nobody
else
echo "Erreur, vous ne devez pas entrer de paramètres"
fi

https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 4/7
24/09/2023 18:03 TP03 : Shell Bash · GitHub

Exercice : Mon utilisateur existe t’il


Ecrire un script qui verifie si un utilisateur existe deja.

en fonction d’un login passe en paramètres


en fonction d’un UID passe en paramètres Si l’utilisateur existe retourner son UID.
Sinon ne rien renvoyer.

Check qu'il n'y a qu'un seul paramètre. Si oui, on parcours avec la commande awk les
lignes du fichier /etc/passwd en lui transmettant la variable "var" contenant le paramètre.
Check que ce dernier corresponde au nom de l'utilisateur ($1) ou au UID ($3). Si vrai alors
l'utilisateur existe et affiche un message contenant le nom et l'UID de l'utilisateur
recherché.

#!/bin/bash
if [ $# -eq 1 ]
then
dir="/etc/passwd"
awk -v var=$1 -F : '{
if(var==$1 || var==$3)
print "Cet utilisateur nommé " $1 " existe avec comme UID : " $3
}' $dir
else
echo "Erreur, vous devez rentrer un UID valide ou un nom d'utilisateur"
fi

Exercice : Creation utilisateur


Ecrire un script pour creer un compte utilisateur voir : man useradd Utilisez votre script de
verification d’existance d’utilisateur avant de creer. Il faudra verifier que l’utilisateur en
cours d’execution est bien root voir echo $USER Il faudra creer son home dans /home
apres avoir verifier qu’il n'y a pas déjà un repertoire portant le même nom. Il faudra
repondre à une suite de question : voir man read

login

Nom

Prenom

UID

GID

Commentaires

https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 5/7
24/09/2023 18:03 TP03 : Shell Bash · GitHub

#!/bin/bash
#Bretzner Raphaël
ROOT_UID=0
SUCCESS=0
E_USEREXISTS=70

# Run as root, of course. (this might not be necessary, because we have to


run the script somehow with root anyway)
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "Must be root to run this script."
exit $E_NOTROOT
fi

#test, if both argument are there


if [ $# -eq 2 ]; then
username=$1
pass=$2

# Check if user already exists.


grep -q "$username" /etc/passwd
if [ $? -eq $SUCCESS ]
then
echo "User $username does already exist."
echo "please chose another username."
exit $E_USEREXISTS
fi

useradd -p `mkpasswd "$pass"` -d /home/"$username" -m -g users -s /bin/bash


"$username"

echo "the account is setup"

else
echo " this programm needs 2 arguments you have given $# "
echo " you have to call the script $0 username and the pass "
fi

exit 0

Exercice : lecture au clavier

Exercice : appreciation

Creer un script qui demande à l’utilisateur de saisir une note et qui affiche un message en
fonction de cette note :

“très bien” si la note est entre 16 et 20 ;


https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 6/7
24/09/2023 18:03 TP03 : Shell Bash · GitHub

“bien” lorsqu’elle est entre 14 et 16 ;

“assez bien” si la note est entre 12 et 14 ;

“moyen” si la note est entre 10 et 12 ;

“insuffisant” si la note est inférieur à 10. Pour quitter le programme l’utiliateur devra
appuyer sur q.

#!/bin/bash #Bretzner Raphaël note=0 i=0

until [ "$note" -lt 0 ]; do echo "Entrez votre note (q pour quitter) :" read -r note if [
"$note" = "q" ]; then note=-1 echo "au revoir !" elif [ "$note" -ge 16 ]; then echo "très
bien" elif [ "$note" -ge 14 ]; then echo "bien" elif [ "$note" -ge 12 ]; then echo "assez
bien" elif [ "$note" -ge 10 ]; then echo "moyen" elif [ "$note" -ge 0 ]; then echo
"insuffisant" else echo "au revoir !" fi let i=$i+1 done

if [ "$i" -le 0 ]; then let i=1 fi

Fin

https://gist.github.com/bretznerR/578236f8a0978d79b9f4ce6dae02fd00 7/7

Vous aimerez peut-être aussi