Exercice 8 - scripts shell : Passer des paramètres à un script

On touche à la fin de la première série des exercices des scripts shell, celui-ci comporte une vision un peu simplifiée d’une notion très importante : les paramètres passés aux scripts.

Titre : Passer des paramètres à un script

Matériel :
Qu’est-ce qu’un paramètre ?
Un paramètre va être le remplissage d’une variable du script. Cela va permettre (entre autres) :
1. d’utiliser un script pour traiter plusieurs fichiers sans avoir à ré-écrire le script
2. donner une indication au script sur son comportement

Exemple 1 :

dans sa crontab (table de planification des tâches à exécuter pour les unix et gnu/linux) Emilie va pouvoir indiquer :
# mm HH jj MMM JJJ script (minutes - heures - jour du mois 1-31 - mois (n°) - jour du mois (0-6 0=dimanche)
# a 21h tous les jours, sauvegarde des donnees du /home/emilie
00 21 * * 1-5 /usr/local/scripts/sauvegardes.sh /home/emilie /reseau/emilie/sauvegardes
# a 21h03 tous les jours , sauvegarde du repertoire web vers /var/www/emilie
03 21 * * 1-5 /usr/local/scripts/sauvegardes.sh /home/emilie/publicweb /var/www/emilie

Exemple 2 :

grâce au même script on va pouvoir effectuer plusieurs traitements :
# mm HH jj MMM JJJ script (minutes - heures - jour du mois (1-31) - mois (1-12) - jour du mois (0-6 0=dimanche)
00 23 * * 1-5 /usr/local/scripts/sauvegardes.sh QUOTIDIENNE
00 22 * * 0 /usr/local/scripts/sauvegardes.sh HEBDOMADAIRE
00 20 27 * 6 /usr/local/scripts/sauvegardes.sh MENSUELLE

Il y a plusieurs façons de dire à un script d’attendre un paramètre :
1. manuellement avec des “if - fi” pour vérifier si le paramètre est là.
2. un peu plus automatiquement avec un “case - esac”

Résultat à fournir :
En vous basant sur les indications données dans la crontab, rédigez le script sauvegardes-generaliste.sh pour pouvoir passer en paramètres les valeurs des répertoires sources et des répertoires cibles (pour l’instant ne donner que ces 2 paramètres). Evidemment, basez-vous sur sauvegardes.sh de l’exercice précédent. Utilisez if, vérifiez bien que l’utilisateur a entré les deux valeurs en paramètres et que ces répertoires existent sinon, empêchez le script de continuer de s’exécuter.

Indications :
Les paramètres sont des valeurs de variables passées au script, elles sont vues ainsi par le script :
sh script1.sh 1 2 3
$1 est la valeur du premier paramètre, $2 est la valeur du second paramètre …

La condition if ici :
if le premier paramètre après le script est = à QUOTIDIENNE
c'est telle commande
fi

Une façon d’écrire et de vérifier qu’un paramètre est passé :
# TYPESAUV est le parametre à passer en ligne de commande lors du
# lancement du script sauvegardes.sh QUOTIDIENNE
TYPESAUV=${1:-Dummy}

Donc soit on a passé une valeur en paramètre soit on ne nous a rien donné et nous donnons au paramètre une valeur “Dummy”
if [ "${TYPESAUV" = "Dummy" ]
then
echo “Type de sauvegarde non passe en parametre du script”
# on indique la sortie d’ecran
what $0scripts-shell-exercices - Google Bloc-notes
# on ne continue pas l’exécution du script et on s’arrête.
exit 1
fi

Tagged with:

Exercice 7 sur les scripts shell - Condition : vérifier qu’un répertoire de sauvegarde existe et sauvegarder dans ce répertoire

====================
Exercice 7
====================
Titre : Condition : vérifier qu’un répertoire de sauvegarde existe et sauvegarder dans ce répertoire

Matériel :
Notre répertoire home est /home/emilie (remplacez par votre login)
Notre répertoire de sauvegarde est /reseau/emilie/sauvegardes

Résultat à fournir :
Un script appelé sauvegardes.sh qui va permettre de copier et synchroniser le répertoire /home/emilie de Emilie à l’intérieur d’un répertoire appelé quotidienne dans /reseau/emilie/sauvegardes/ ce script doit :

  1. Vérifier que le répertoire cible /reseau/emilie/sauvegardes existe sinon sortir du script.
  2. Lancer la synchronisation des données d’Emilie vers le répertoire /reseau/emilie/sauvegardes/quotidienne, pensez à créer le répertoire “quotidienne” s’il n’existe pas.
  3. Faire en sorte de conserver dans un fichier de log appelé sauvegardes.log le fait que la synchronisation s’est lancée "Date - Heures:Minutes - Lancement de la synchronisation via le script sauvegardes.sh"
  4. Indiquer la taille des données dans le répertoire cible dans le fichier de log sauvegardes.log sur la ligne en dessous de “… lancement ” sous la forme "Date - Heures:minutes - Fin de synchronisation - Taille de /reseau/emilie/sauvegardes = XXXX Mo."
  5. Le script sera utile pour sauvegarder d’autres répertoires à terme, donc pensez bien à utiliser des variables pour le répertoire source et le répertoire cible.

Indications :

  1. Commandes à utiliser : if fi, mkdir, rsync, du, echo,
  2. Variables : attention à ne pas écrire trop de choses en dur (= sans utiliser de variables)
  3. Une condition sur l’”existence” d’un répertoire : if [ ! -d "/reseau/emilie/sauvegardes" ] , sur l’”existence” d’un fichier : if [ ! -f "/home/emilie/.profile" ] (il existe beaucoup de types de conditions pouvant être vérifiées, nous verrons cela au fil des exercices).
  4. Pensez désormais à terminer vos scripts par la ligne exit 0 (au lieu de exit), ce qui correspond à un code retour “normal” d’un script.
  5. Bonus utile : que fait logrotate ?

Rappel : toutes les corrections précédentes : lien vers les corrections précédentes

Exercice de script shell - condition : vérifier qu’un utilisateur ne va pas lancer un script en root

Titre : Condition : vérifier qu’un utilisateur ne va pas lancer un script en root

Matériel :
Utilisez le script1.sh (et le fichier donnees1.sh)

Résultat à fournir :
Copiez le script1.sh en un script6.sh, et inclure du code au début du script qui empêchera l’utilisateur root de lancer ce script6.sh (En fait on vérifie quel est l’utilisateur qui lance le script, et on voit si on veut ou non continuer l’exécution du script).

Indications :

Commandes à utiliser : whoami, if fi
La boucle if fi est un chemin emprunté par le script lorsqu’une condition est validée.
if le résultat de la commande renvoyant l'utilisateur courant est égal à root
then
exécute cette commande pour prévenir de l'usage du script
exécute aussi cette commande pour sortir du script
fi

Comment écrit-on l’égalité entre deux valeurs dans une boucle en shell ?
if [ "${VARIABLE}" = "valeur attendue" ]
Comment écrit-on la différence entre deux valeurs dans une boucle en shell ?
if [ "${VARIABLE}" != "valeur attendue" ]

A vous de répondre :
Quel est le code retour de exit pour sortir du script sur un code erreur ?
Quel est le code “normal” de sortie ?

La prochaine fois, un script sur les sauvegardes.
Travaillez-bien ! et n’hésitez pas à poser vos questions.

Tagged with:

/ETC : live stream

Pour voir et écouter le livstream du Eclectic Tech Carnival : http://giss.tv:8000/genderchangers.ogg (25-31mai)

Tagged with:

16-22 jun 2008 /Vitry sSeine : HackerSpaceFest

What would the Internet look like without hackers? What would computing look like without free and open source software? What would the culture look like with DRM and closed media channels everywhere? Where do art and technology merge? Would Gilbert Simondon be happy if he were alive today?

Many questions will be debated during the first Hacker Space Fest from the 16th to the 22nd June 2008 near Paris, in the industrial outskirts of Vitry-sur-Seine.

The first Hacker Space Fest (HSF) will be held at the /tmp/lab near Paris, France in June 2008. The goal of this festival is to bring together people from many cultural and technological backgrounds and from different Hacker Spaces and Autonomous zones in France and Europe (and from beyond, if they can attend) to share and show what’s going on.

The broad term “hacking” is understood in this context as “creative use of technology” and not “illegal computer break in” (we don’t buy the political & media terror-inducing FUD).

This festival is autonomous, non-profit and collaborative. We encourage you to contribute in any way to this adventure by joining our team for this event.

Watch out for more information: http://hackerspace.net

Tagged with:

25-31 mai 2008 /Amsterdam : Eclectic Tech Carnival

The seventh Eclectic Tech Carnival is taking place in the

Plantage Dok (Plantagedoklaan 8-12) in Amsterdam
from Sunday May the 25 until Saturday May the 31st 2008.

The /ETC is an event where women interested in technology meet each other to exchange experiences in a fun and educational manner. It is a combination of a female hack meeting and skill-share.

The evening programme is free and open to the public. Men and women of all ages and backgrounds are welcome, so join in!

The evening programme:

  • Monday May 26, 17:30-19:00: The makeITfair initiative, presented by Tim Steinweg and Peter Pennartz, covering issues in the ICT sector, mainly child labour, local community groups, toxins, low wages, waste, and perception and presentation in the West.
  • Tuesday May 27, 18:00-20:00: De Geuzen ie Riek Sijbring, Femke Snelting and Renee Turner lead an interactive workshop called Vrouwelijke Iconen (Female Icons).
  • Wednesday May 28 Part I : 18:00-20:00: Melanie Rieback speaks on RFID, Applications, Security and Privacy.
  • Wednesday May 28 Part II : 21:00-23:59: Performances, with Reni Hofmeuller as MJ (microphone jockey)
  • Thursday May 29 22:00-01:00: Party in the Vrankijk (Spuistraat 216) in Amsterdam with VJ’s & DJ’s. Entrance fee is 3 Euro (the proceeds will go towards covering general /ETC costs).
  • Friday May 30 18:30-20:30: Presentation of the recently published: “New Feminism” by Marina Grzinic and Rosa Reitsamer in Pakhuis de Zijger (Piet Heinkade 181b).

http://eclectictechcarnival.org/

Tagged with:

Scripts shell - exercice 5 - La sortie standard et la sortie d’erreurs; les logs des exécution

Titre : La sortie standard et la sortie d’erreurs; les logs des exécutions

Matériel :
Que se soit pour une sauvegarde ou pour une exécution de script il est très important de logguer si le script s’est exécuté et le cas échéant les erreurs qui ont été produites. On utilisera le script1.sh de l’exercice 1.

Résultat à fournir :
1. Quelle ligne faut-il modifier dans le script 1 pour rediriger toute l’exécution du script dans un fichier (l’ensemble des commandes+résultats)? Que faut-il ajouter dans ce script et où ?
Indication : Le script sera lancé de la façon suivante : sh script1.sh > trace-execution-script.log, il faut que vous trouviez la modification à apporter au contenu du fichier script1.sh

2. La ligne de commande qui va permettre de rediriger les résultats du script1.sh dans un fichier script1.log et les erreurs de script1.sh dans un autre fichier. Pour tester la redirection d’erreurs, renommez le fichier donnees1.csv en donnees1.csv.old

Indication :
Pour la question 2 : faites une recherche sur les codes de sortie :
1. code de sortie standard stdout
2. code sortie erreur stderr

Le prochain exercice portera sur les conditions :) bientôt ! n’hésitez pas à poser vos questions.

Scripts shell - exercice 4 : redirections

Titre : au lieu de la sortie standard qui oblige d’être présent ou présente lors de l’exécution du script et/ou à recopier les informations dans un fichier texte, on va rediriger la sortie standard (sdout) vers un fichier.

Matériel :
Reprendre l’exercice 3 (avec le fichier donnees3.csv) et le script3.sh que vous avez créé dans l’exercice 3.

Résultat à fournir :
Il faut rediriger le résultat du script3.sh dans un fichier appelé extraction-script3-”anneemoisjour-hhmm”.txt (si on lance le script le 3 février 2008 à 12h10, le fichier de sortie doit s’appeler extraction-script3-20080203-1210.txt ).
Il y a deux façons de faire : intégrer la génération du fichier de sortie au script, c’est la façon la plus propre de procéder, l’autre façon est de rediriger la sortie sur la ligne de commande (c’est alors dépendant de la façon de lancer le script.). Ecrivez les deux manières de faire.

Indications :
Utiliser la redirection > et >>.
Commandes à utiliser : date

Questions à se poser :
Est-il nécessaire de créer un fichier extraction-script3-”anneemoisjour-hhmm”.txt vide avant ? Quelle est la différence entre > et >> ?

Bonus :
Documentez-vous sur la commande tee, et envisagez de l’utiliser dans le script4.sh (qui serait une copie du script 3). Quelle est l’utilité de cette commande ?

à bientôt
Aurélie

16 Mai 2008 : Montreuil/ Panorama Queer

Vendredi 16 Mai 2008 a 20h30
Maison Populaire de Montreuil
ENTREE LIBRE

Hybridation des genres, machines, prothèses, identités cyborg, réappropriations performatives, pornographie signent le devenir queer du cinéma contemporain, repoussant, aux confins de la vidéo d’artiste et du cinéma expérimental, les identifications binaires, les limites du corps, du privé, de l’obscène. Le nouveau cinéma Queer documente aussi la subculture voguing, les politiques Queer antimilitaristes et anti G8 et les représentations trans, depuis une position souvent revendiquée comme collective, qui réfléchit au cadre éthique dans lequel (auto)représenter ou témoigner d’« identités qui échappent à l’œil du système ».

plus d’information

10may-22jun 2008/Berlin: HACK.Fem.EAST

Women, Technology and Networks in Eastern Europe

Exhibition, performances, meetings
10 May - 22 June 2008
Kunstraum Kreuzberg / Bethanien Berlin, Germany
Opening: 9 May, from 19.00

The exhibition project HACK.Fem.EAST seeks to present experimental and artistic practices of artists and activists working in digital networks in Eastern Europe. Main topics are media, art and hacking. Main protagonists are women or projects in which women play an important role.

More information on the exhibition : http://www.hackfemeast.org.

Tagged with: