TD/TP1 Scripts Shell

Documents pareils
Environnements informatiques

D r o i t s D r o i t s Q u i z z : i n t e r n e t t e x t e

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

Introduction aux Systèmes et aux Réseaux

Unix/Linux I. 1 ere année DUT. Université marne la vallée

Année Universitaire ième année IMAC Mardi 6 janvier Cloud computing Travaux Pratiques

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

TP1 - Prise en main de l environnement Unix.

1. Structure d'un programme FORTRAN 95

Projet Administration Réseaux

Pharmed. gestion de pharmacie hospitalière. Installation / déploiement

SERVEUR DE SAUVEGARDE POUR BCDI3. par. G.Haberer, A.Peuch, P.Saadé

IFT Systèmes d exploitation - TP n 1-20%

TP 1 Prise en main de l environnement Unix

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation système en C/C++

Algorithmique et Programmation, IMA

PRESENTATION RESSOURCES. Christian Dupaty BTS Systèmes Numériques Lycée Fourcade Gardanne Académie d Aix Marseille

C.M. 1 & 2 : Prise en main de Linux

Cours Programmation Système

«Astrophysique et instrumentations associées» Cours UNIX Benoît Semelin

1 Démarrage de Marionnet

Aide-Mémoire unix. 9 février 2009

Client windows Nagios Event Log

Sauvegarde sous MAC avec serveur Samba

Première partie. Qu est-ce qu un script?

Outils pour la pratique

Serveur de sauvegardes incrémental

Travaux Pratiques sur GRID 5000


TP LINUX : MISE EN PLACE DU SERVEUR DE MESSAGERIE QMAIL

Linux et le Shell. Francois BAYART. Atelier du samedi 20 Novembre

Licence Sciences et Technologies Examen janvier 2010

Solution du challenge SSTIC Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

Installation de Zabbix

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

TD3: tableaux avancées, première classe et chaînes

Les différentes méthodes pour se connecter

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Exercice sur les Dockers

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Les clients GNU/Linux

Programmation C. Apprendre à développer des programmes simples dans le langage C

VXPERT SYSTEMES. CITRIX NETSCALER 10.1 et SMS PASSCODE 6.2. Guide d installation et de configuration pour Xenapp 6.5 avec SMS PASSCODE 6.

Nouvelle version de Zonecheck, la 3.0, avec tests DNSSEC

Powershell. Sommaire. 1) Étude du cahier des charges 2) Veille technologique 3) Administration sur site 4) Automatisation des tâches d administration

Introduction à l Administration Systèmes et Réseaux

INFO-F-404 : Techniques avancées de systèmes d exploitation

Le prototype de la fonction main()

Les Boitiers de Vote Electroniques (Clickers)

Préparation LPI. Exam Securité. Document sous licence Creative commons «by nc sa» nc sa/2.

Introduction au Système d Exploitation Unix/Linux

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

Année Cours Unix-Shell. par. Karam ALLALI. Ecole Spéciale d Informatique

sshgate Patrick Guiran Chef de projet support

La Comptabilité UNIX System V Acctcom

TRIGONOMETRIE Algorithme : mesure principale

Corrigé des TD 1 à 5

Table des matières. Introduction

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Procédure de sauvegarde - Cobian Backup

Contents. 1 Premiers pas en Linux. 1.2 Généralités. 1.1 Bref historique Linux

Cours d algorithmique pour la classe de 2nde

Premiers pas en Linux

Configurer la supervision pour une base MS SQL Server Viadéis Services

Résumé 1. NOTIONS DE BASES :

Bon ben voilà c est fait!

Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application"

Oracle 11g. Installation et administration. Claude Duvallet 1/36

Systèmes d exploitation

La mémoire. Un ordinateur. L'octet. Le bit

Cours 1 : Qu est-ce que la programmation?

Titre: Version: Dernière modification: Auteur: Statut: Licence:

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Python Les fondamentaux du langage

CONFIGURATION DU SERVEUR DE MAILS EXIM. par. G.Haberer, A.Peuch, P.Saade

Live box et Nas Synology

PowerShell. Référence. Windows. Tyson Kopczynski. Réseaux et télécom. Programmation. Génie logiciel. Sécurité. Système d exploitation

EPREUVE PRATIQUE DES TECHNIQUES INFORMATIQUES ACTIVITE N 1. Thème de l activité : Configuration d un firewall

Guide d'installation de la base de données ORACLE 10g ( ) pour linux FEDORA CORE 4.

TP, première séquence d exercices.

Cours 1 : La compilation

Cours Langage C/C++ Programmation modulaire

Plan du cours. Historique du langage Nouveautés de Java 7

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Modules du DUT Informatique proposés pour des DCCE en 2014/2015

Les processus 2/54. Qu est-ce qu un processus? 3(6)/54. Se souvenir 1(1)/54. Le système de fichiers (exemple du disque dur)

Quelques éléments de compilation en C et makefiles

TP Bases de données réparties

Chapitre 10 : Logiciels

Polycopié Cours Système d Exploitation I. Programme : Filière SMI S3

TP 4 de familiarisation avec Unix

Vulnérabilités et sécurisation des applications Web

Administration de Parc Informatique TP02 : Utilisation du logiciel Marionnet

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII,

Personnes ressources Tice. Académie de Rouen

Télécom Nancy Année

Transcription:

TD/TP1 Scripts Shell 1 Exercices de TD 1. Écrire un script lscatx qui prend en entrée un nom de chier et qui traite ce nom de la façon suivante : si c est un répertoire, on afche son contenu au format long; si c est un chier non exécutable, on afche son contenu; si c est un chier exécutable, on lance son exécution. Le script afche une erreur si le nombre d arguments est incorrect ou si le nom fourni est celui d un chier qui n existe pas. # test du nombre d arguments if [ $# -ne 1 ] ; then echo "Usage : $0 chier" # Est-ce que le chier existe? if [! -e $1 ] ; then echo "$1 n est pas un chier existant" # Si c est un dossier if [ -d $1 ] ; then ls -l $1 elif [ -x $1 ] ; then # Si c est un exécutable./$1 # sinon, on afche le contenu cat $1 2. Écrire un script fusion qui prend en arguments les noms de 3 chiers f1, f2 et f3 et qui copie f1 puis f2 dans f3. Le script afche une erreur si le nombre d arguments est incorrect, si f1 ou f2 ne sont pas des chiers ordinaires, ou si l opération est impossible. if [ $# -ne 3 ] ; then echo "Usage : $0 f1 f2 f3" if [! -f $1 ] [! -f $2] ; then echo "Fichiers d entrée incorrects" cat $1 $2 > $3 2>/dev/null echo "Erreur lors de l opération de fusion" 1

3. Écrire un script compile qui prend en arguments deux chiers exec et c.c et qui permet de compiler c.c avec gcc en un exécutable exec. Rappel : la compilation par gcc s obtient en faisant gcc -o exec c.c Une copie de exec sera ensuite placée dans le répertoire bin de l utilisateur. Le script afche une erreur si le nombre d arguments est incorrect ou si la compilation ne s est pas déroulée correctement. if [ $# -ne 2 ] ; then echo "Usage : $0 chier[.c.c.cpp] exec" gcc $1 -o $2 echo "Erreur de compilation" cp $2 ${HOME}/bin/ 4. Écrire un script scpip qui prend en arguments une adresse IP adr, un nom de chier c et éventuellement un nom d utilisateur, et qui tente de copier le chier vers cette adresse en utilisant scp. Rappel : pour copier un chier c depuis sa propre machine vers une machine adr en tant qu utilisateur user, faire scp c user@adr :c Si le nom d utilisateur n est pas fourni, on utilise le nom de l utilisateur qui exécute le script. Le script afche une erreur si le nombre d arguments est incorrect ou si l opération de copie a échoué. if [ $# -eq 2 ] ; then scp $2 ${USER}@$1:$2 elif [ $# -eq 3 ]; then scp $2 $3@$1:$2 echo "Usage : $0 adresseip chier [utilisateur]" echo "Erreur lors de la copie" 2

5. Le répertoire /proc contient un pseudo-système de chiers dans lequel, dès qu un processus est lancé, le système crée un répertoire XXX/ (où XXX est le PID du processus). On trouve dans ce répertoire un chier status dont la première ligne contient le nom de l exécutable associé à XXX. Exemple : crespin@msi : $ head -n 1 /proc/24204/status Name : bash Écrire un script getexe qui afche pour un PID donné le nom de l exécutable associé. Le script afche une erreur si le nombre d arguments est incorrect ou si le PID est invalide. if [ $# -ne 1 ]; then echo "Usage $0 pid" if [! -d "/proc/$1" ]; then echo "$1 n est pas un PID valide" head -n 1 /prov/$1/status cut -f2 6. Ecrire un script mvext qui prend en arguments un nom de chier et une extension et qui renomme le chier en utilisant cette extension. Si le chier n a aucune extension, l extension fournie lui est simplement ajoutée. Exemple :./mvext toto.jpg DAT renomme le chier toto.jpg en toto.dat et./mvext toto DAT renomme le chier toto en toto.dat Le script afche une erreur si le nombre d arguments est incorrect ou si le renommage est impossible. if [ $# -ne 2 ]; then echo "Usage $0 chier extension" nouv=$(echo $1 cut -d. -f1).$2 if mv $1 $nouv 2>/dev/null ; then echo "$1 a été renommé en $nouv" echo "Impossible de renommé $1 en $nouv" 3

7. Écrire un script calc qui prend en arguments un entier, un opérateur (+ ou -) puis un entier, puis qui afche le résultat de l opération. Exemple :./calc 1 + 2 doit afcher la valeur 3 Le script afche une erreur si le nombre d arguments est incorrect, ou si un des arguments est incorrect (par exemple si on fait./calc toto * 3) #/bin/bash if [ $# -ne 3 ]; then echo "Usage : $0 nb1 [+ -] nb2" # (grep -v renvoi le résultat inverse de la recherche (-q = quiet)) # en mode "quiet" grep n afche rien mais renvoi 1 si le pattern a été trouvé, 0 sinon if echo $1 grep -qv "ˆ[0-9]\+$" ; then echo "$1 n est pas un nombre entier" if echo $3 grep -qv "ˆ[0-9]\+$" ; then echo "$3 n est pas un nombre entier" case "$2" in \+) let res=$1+$3 ;; \-) let res=$1-$3 ;; *) echo "$2 n est pas pris en charge" exit 4 esac echo "Result = $res" 4

2 Exercices de TP 1. Améliorer le précédent script lscatx en vériant, avant de traiter le chier, que l utilisateur a les droits de lecture et que la taille est supérieure à 0. if [ $# -ne 1 ] ; then echo "Usage : $0 chier" if [! -e $1 ] ; then echo "$1 n est pas un chier existant" if [! -r $1 ] [! -s $1 ] ;then echo "$1 n est pas un chier exploitable" if [ -d $1 ] ; then ls -l $1 elif [ -x $1 ] ; then./$1 cat $1 2. Améliorer le précédent script fusion en vériant que les chiers f1 et f2 sont accessibles en lecture et ont une taille supérieure à 0. Vérier également que l utilisateur a le droit d écriture dans le répertoire courant. if [ $# -ne 3 ] ; then echo "Usage : $0 f1 f2 f3" if [! -f $1 ] [! -f $2 ] ; then echo "Fichiers d entrée incorrects" if [! -r $1 ] [! -s $1 ] [! -r $2 ] [! -s $2 ] ; then echo "Fichiers d entrée non lisibles" if [! -w "./" ] ; then echo "Impossible d écrire dans le répertoire courant" exit 4 cat $1 $2 > $3 2>/dev/null echo "Erreur lors de l opération de fusion" exit 5 5

3. Améliorer le précédent script compile en ajoutant la possibilité de spécier plusieurs chiers sources à compiler, en faisant par exemple./compile exec c1.c c2.c... (utiliser shift). if [[ $# -lt 2 ]] ; then echo "Usage : $0 exec chier[.c.c.cpp] [chier2.c...]" while [[ $# -gt 1 ]] && [[ $? -eq 0 ]]; do gcc -c $2 shift done if [[ $? -ne 0 ]]; then echo "Il y a eu des erreurs lors de la compilation" gcc *.o -o $1 if [[ $? -ne 0 ]] ; then echo "Erreur lors de l édition de lien" cp $1 $HOME/bin/ 4. Améliorer le précédent script scpip en testant si l adresse fournie est bien une adresse ip au format numérique (par exemple 164.81.60.3) ou texte (par exemple info.msi.unilim.fr) en utilisant sed ou grep. if [[ $# -eq 2 ]] [[ $# -eq 3 ]] ; then if echo $1 grep -q "ˆ[[:digit:]]\+\(\.[[:digit:]]\+\)\{3\}$" ; then echo "Adresse IP au format numérique trouvé" elif echo $1 grep -q "ˆ[[:alpha:]]\+\(\.[[:alpha:]]\+\)*$"; then echo "Nom d hote trouvé" echo "Type d adresse non conforme" if [[ $# -eq 2 ]]; then scp $2 ${USER}@$1:$2 scp $2 $3@$1:$2 echo "Usage : $0 adresseip chier [utilisateur]" if [[ $? -ne 0 ]] ; then echo "Erreur lors de la copie" 6

5. En vous inspirant du précédent script getexe, écrire un nouveau script prenant en argument un nom de commande cmdname, et qui afche le numéro des processus correspondant à cette commande (utiliser le contenu des chiers status des processus stockés dans le répertoire /proc), ou un message d erreur si aucune commande correspondant à ce nom n a été lancée. if [[ $# -ne 1 ]]; then echo "Usage $0 cmdname" let found=0 # rappel : $( ) exécute ce qu il y a entre paranthèse comme une commande # et renvoi le résultat for i in $(ls /proc/); do if [[ -d "/proc/$i" ]] && [[ "$1" = $(head -n 1 /proc/$i/status cut -d \t -f2) ]]; then echo "Commande $1 trouvée pour le PID $i" let found=$found+1 # ou alors found = $(($found+1)) # le contenu de $(( )) est interprété de façon arithmétique # par exemple si a=2, $(($a+1)) renvoie 3 done if [[ $found -eq 0 ]]; then echo "Commande non trouvée" 6. Améliorer le précédent script calc en ajoutant les opérations * et / #/bin/bash if [ $# -ne 3 ]; then echo "Usage : $0 nb1 [+ - * /] nb2" if echo $1 grep -qv "ˆ[0-9]\+$" ; then echo "$1 n est pas un nombre entier" if echo $3 grep -qv "ˆ[0-9]\+$" ; then echo "$3 n est pas un nombre entier" case "$2" in "+") let res=$1+$3 ;; "-") let res=$1-$3 ;; "*") let res=$1*$3 ;; "/") let res=$1/$3 ;; *) echo "$2 n est pas pris en charge" exit 4 esac echo "Result = $res" 7