EI shell notes
Requirements
##!/bin/bash
#Name : Brhili ahmed
#Date: 06/03/2023
#Objet/sujet : [subject]
$1 -> premier arguments
$# -> le nombre total d'arguments
_________________________________
$* -> liste des arguments
echo "Les arguments sont : $*"
#shell
$ ./test.sh foo bar baz
Les arguments sont : foo bar baz
Faire un menu
##!/bin/bash
#Name : Brhili ahmed
#Date: 22/02/2022
#Objet/sujet : User Existence
if [ -z "$1" ]; then
echo "Veuillez spécifier un utilisateur."
exit 1
fi
## verifier si un utilisateur existe
if id "$1" >/dev/null 2>&1; then
echo "L'utilisateur $1 existe."
echo "Bonjour, $1 ! Veuillez choisir un nombre:"
echo "1. Option 1"
echo "2. Option 2"
echo "3. Option 3"
echo "4. Quitter"
read -p "Votre choix: " choice
case $choice in
1) echo "Vous avez choisi l'option 1.";;
2) echo "Vous avez choisi l'option 2.";;
3) echo "Vous avez choisi l'option 3.";;
4) echo "Bye"; exit;;
*) echo "Choix non valide. Veuillez réessayer."; exit;;
esac
else
echo "L'utilisateur $1 n'existe pas."
exit 1
fi
jeu PlusGrandPlusPetit joueur
##!/bin/bash
#Name : Brhili ahmed
#Date: 22/02/2022
#Objet/sujet : jeu du plus petit, plus grand,
# Fonction pour générer un nombre aléatoire entre 1 et 100
generate_random_number() {
echo $((1 + RANDOM % 100))
}
# Initialisation du meilleur joueur
best_player=""
best_score=0
# Demande le nom du joueur
read -p "Entrez votre nom: " player_name
# Début du jeu
echo "Bienvenue au jeu du plus petit, plus grand, $player_name !"
echo "Le but du jeu est de deviner un nombre compris entre 1 et 100 en moins de 10 tentatives."
# Génère le nombre aléatoire
secret_number=$(generate_random_number)
# Boucle de jeu
for i in {1..10}; do
EI shell notes 1
read -p "Tentative #$i: Entrez un nombre entre 1 et 100: " guess
# Vérifie si le nombre est valide
if ! [[ "$guess" =~ ^[0-9]+$ ]] || ((guess < 1)) || ((guess > 100)); then
echo "Erreur: Entrez un nombre entre 1 et 100."
continue
fi
# Vérifie si le nombre est correct
if ((guess == secret_number)); then
echo "Félicitations $player_name, vous avez trouvé le nombre mystère en $i tentatives !"
# Vérifie si le joueur a battu le record
if ((best_score == 0)) || ((i < best_score)); then
best_player=$player_name
best_score=$i
echo "Bravo $player_name, vous avez battu le record !"
fi
# Sortie de la boucle
break
elif ((guess < secret_number)); then
echo "Le nombre est plus grand."
else
echo "Le nombre est plus petit."
fi
done
# Affiche le meilleur joueur
if [[ "$best_player" != "" ]]; then
echo "Le meilleur joueur est $best_player avec un score de $best_score."
fi
Trouver quel fichier se situe la chaine de caractère _XOPEN
grep -rnw /usr/include -e "_XOPEN_SOURCE"
script shell qui vérifie que les 4 paramètres -a , -b , -c et -d sont passés en argument et qui exécute une action spécifique en fonction de
chacun de ces paramètres
#!/bin/bash
if [ $# -ne 4 ]; then
echo -e "\e[31mErreur : Ce script doit être appelé avec exactement 4 paramètres (-a, -b, -c, -d)\e[0m"
exit 1
fi
if [ "$1" == "-a" ]; then
echo "Paramètre -a : $2"
fi
if [ "$3" == "-b" ]; then
echo "Paramètre -b : $4"
fi
if [ "$1" == "-c" ]; then
echo "Paramètre -c : $2"
fi
if [ "$3" == "-d" ]; then
echo "Paramètre -d : $4"
fi
Menu shell : /etc/services
afficher les services tcp et leur nombre
recherchez un service par son nom
affichez les mots non attribué jusq'a 1000
#!/bin/bash
# Affiche le nombre de services TCP
function nb_services_tcp() {
nb_tcp=$(grep '/tcp' /etc/services | wc -l)
echo "Nombre de services TCP : $nb_tcp"
}
# Recherche un service par son nom
function recherche_service() {
read -p "Entrez le nom du service à rechercher : " service
result=$(grep "$service" /etc/services)
if [[ -n "$result" ]]; then
echo "$result"
else
EI shell notes 2
echo "Le service $service n'a pas été trouvé."
fi
}
# Affiche les mots non attribués jusqu'à 1000
function mots_non_attribues() {
for i in {0..1000}; do
result=$(grep -w "$i/tcp" /etc/services)
if [[ -z "$result" ]]; then
echo "$i/tcp"
fi
done
}
# Menu principal
while true; do
echo "Menu principal :"
echo "1. Afficher le nombre de services TCP"
echo "2. Rechercher un service par son nom"
echo "3. Afficher les mots non attribués jusqu'à 1000"
echo "4. Quitter"
read -p "Entrez votre choix : " choix
case $choix in
1)
nb_services_tcp
;;
2)
recherche_service
;;
3)
mots_non_attribues
;;
4)
echo "Au revoir !"
exit 0
;;
*)
echo "Choix invalide. Veuillez réessayer."
;;
esac
done
verify if a file exists in shell
if [ -f "/path/to/file" ]; then
echo "File exists"
else
echo "File does not exist"
fi
or
if [ -e "/path/to/file" ]; then
echo "File or directory exists"
else
echo "File or directory does not exist"
fi
Boucle while in shell
a=0
while [ $a -lt $1 ]
do
echo $a
a=`expr $a + 1`
done
Boucle for in shell
for i in $( seq 100 )
do
echo $i
done
or
for variable_name in [list]
do
# code to be executed for each item in the list
done
#This loop will print the names of three files, one on each line.
for file in file1.txt file2.txt file3.txt
do
echo $file
done
_____________________________
EI shell notes 3
files=$(ls *.txt)
for file in $files
do
echo $file
done
Verifier la taille d’un fichier
du -h mon_fichier.txt
creer multiple files at once
touch text_{1..10}.txt
Undelete
verifie la presence de l'argument dans un fichier
#Check l'existence de l'argument
if [ -z "$1" ]
then
echo "l'argument n'est pas fourni";
fi
# (-z test si la chaîne de caractères est vide)
Verifie si le fichier exist
## verifier que le fichier existe
if [ -f $1 ]; then
echo "file exist"
else
echo "file not exist"
exit
fi
Verifier la presence d’un repertoire (sinon creer le )
## verifier que la poubelle (folder) existe
if [ ! -d poubelle ]; then
mkdir poubelle
else
echo "folder exist"
fi
## verifier que la poubelle (folder) existe
if [ ! -d poubelle ]; then
mkdir poubelle
else
echo "folder exist"
fi
#### Si la poubelle ontien t + 100 fichiers , videz le
nb=`ls | wc -l`
# dir_home= `pwd`
if [ $nb -gt 100 ]; then
echo "Warning: The trash contains more than 100 files. Empty the trash? (y/n)"
read choice
if [ "$choice" = "y" ]; then
rm -v /home/madripped/poubelle/*
else
echo "folder dosen't contains more than 100 files"
exit 0
fi
else
echo "folder dosen't contains more than 100 files"
fi
EI shell notes 4
# Vérifier que le fichier n'existe pas déjà dans la poubelle
if [ -f "$POUBELLE/$1" ]; then
read -p "Le fichier existe déjà dans la poubelle. Voulez-vous le remplacer ? (o/n)" choix
if [ "$choix" == "o" ]; then
rm -f "$POUBELLE/$1"
else
echo "Suppression annulée"
exit 1
fi
fi
Pour gérer un fichier log de toute activité,
echo "Mon message de log" >> mon_script.log
7°) Reprenez la question 4, ajouter une autre condition de vidage de la
poubelle. La poubelle ne doit pas contenir plus de 100 fichiers ET la taille
ne pas dépasser 4 MO.
nb=`ls | wc -l`
size=`du -sm | awk '{print $1}'`
if [ $nb -gt 100 ] || [ $size -gt 4 ]; then
echo "Warning: The trash contains more than 100 files. Empty the trash? (y/n)"
read choice
if [ "$choice" = "y" ]; then
rm -v /home/madripped/poubelle/*
else
echo "folder dosen't contains more than 100 files"
exit 0
fi
else
echo "folder dosen't contains more than 100 files"
fi
#Ce code utilise la commande du pour obtenir la taille de la poubelle en mégaoctets (Mo) et la commande awk pour extraire la première colonne contena
8°) Au lieu de coder en dur dans le script les paramètres de vidage de la
poubelle, mettre ces deux paramètres dans un fichier afin de pouvoir
modifier les caractéristiques de la poubelle sans modifier le script.
Voici comment modifier le script pour utiliser un fichier de configuration externe pour les paramètres de vidage de la poubelle :
1. Créez un fichier nommé "trash_config" dans le même répertoire que le script.
2. Ajoutez les deux paramètres de vidage de la poubelle (nombre maximal de fichiers et taille maximale en Mo) dans le fichier
"trash_config" en utilisant le format suivant:
max_files=100
max_size=4
1. Modifiez le script pour lire ces paramètres à partir du fichier de configuration. Voici le code modifié :
#!/bin/bash
# Lire les paramètres de configuration de la poubelle à partir du fichier trash_config
source ./trash_config
# Obtenir le nombre de fichiers et la taille de la poubelle
nb=`ls | wc -l`
size=$(du -sm /home/madripped/poubelle | awk '{print $1}')
# Vérifier si la poubelle contient plus de $max_files fichiers ou si sa taille dépasse $max_size Mo
if [ $nb -gt $max_files ] || [ $size -gt $max_size ]; then
echo "Attention: la poubelle contient plus de $max_files fichiers ou sa taille dépasse $max_size Mo. Vider la poubelle ? (o/n)"
read choice
if [ "$choice" = "o" ]; then
rm -v /home/madripped/poubelle/*
echo "La poubelle a été vidée."
else
echo "La poubelle n'a pas été vidée."
fi
else
echo "La poubelle ne contient pas plus de $max_files fichiers et sa taille ne dépasse pas $max_size Mo."
fi
EI shell notes 5
exit 0
Ce code utilise la commande source pour inclure le fichier "trash_config" dans le script et lire les valeurs de paramètres de la poubelle. Les
variables max_files et max_size sont ensuite utilisées dans la condition pour vérifier si la poubelle doit être vidée.
Notez que j'ai également modifié la commande du pour spécifier le répertoire de la poubelle ( /home/madripped/poubelle ) pour obtenir la taille
correcte de la poubelle. Cela permet de modifier les caractéristiques de la poubelle en modifiant simplement le fichier "trash_config" sans
avoir à modifier le script lui-même.
faire un menu
while true
do
read a
case $a in
1) echo "a=1";;
2) echo "a=2";;
*) echo "autre cas";;
esac
done
lister tous les fichiers modifiés au cours des 7 derniers jours dans le répertoire courant
find . -mtime -7 -type f
# partage fichier command
sudo mount -t cifs //192.168.1.100/share /mnt/share -o username=myuser,password=mypassword,domain=mydomain
You can read more - gt -eq by typing man test
man test
créer une archive en shell,
tar -cvzf EI_1.tar.gz scriptsh/
exctraction
tar -xvf archive.tar.gz
EI shell notes 6