scripting (suite)
Exercices
Faire un script copycd qui copie un CD-ROM. utiliser les commandes:
- dd
- eject
- cdrecord
#!/bin/sh dd if=/dev/hdc of=/home/linux/copycd.iso eject /dev/hdc echo "inserer un CD-ROM vierge et appuyer sur 'entree'" read var cdrecord dev=ATAPI:0,0,0 /home/linux/copycd.iso
On peut ensuite associer le script à un bouton xfce pour se faciliter l'appel au script. cocher “exécuter dans un terminal”
Il faut s'assurer que l'utilisateur appelant le script à le droit de lire depuis le lecteur de CD-ROM.
ls -l /dev/hdc brw-rw---- 1 root disk 22, 0 2004-09-18 13:51 /dev/hdc adduser linux disk
N.B: il faut se délogguer et se relogguer pour que ça prenne effet.
script chkfile qui vérifie si le fichier passé en argument existe dans le répertoire courant. cf. plus haut (déjà fait)
Exemple de script donné:
for fichier in * do if grep -q $1 $fichier then echo "$1 trouve dans :" ls -l | grep $fichier echo "" more $fichier fi done
Ce script va parcourir le répertoire courant. Il va chercher dans chaque fichier si la chaîne de caractère passée comme argument se trouve dans un des fichiers du répertoire courant.
case
Syntaxe:
case variable in sol1) instruction;; sol2) instruction;; sol3) instruction;; esac
Exemple:
case $texte in oui) echo "OK";; non) echo "pas OK";; *) echoe "veuillez repondre par oui ou non";; esac
vérifie la valeur de la variable texte: si c'est oui, il affiche OK, si c'est non il affiche pas OK, sinon, il affiche veuillez…
Exercice: Question dont la réponse est oui ou non
echo "Voulez-vous supprimez l'image ISO?" read reponse case $reponse in oui) rm /home/linux/copycd.iso;; non) echo "l'image est conservée comme /home/linux/copycd.iso";; *) echo "merci de répondre par oui ou non à l'avenir; l'image est conservée comme /home/linux/copycd.iso";; esac
A rajouter au script copycd.sh
commande de backup de /home/user
#!/bin/sh echo "Sauvegarde de `du -hs $HOME` en cours..." if [ ! -d ~/backup ]; then mkdir ~/backup fi mkisofs -o ~/backup/`whoami`_`date ))iso-8601` $HOME 2>> ~/cdbck.log echo "Sauvegarde terminee"
La commande entre ` ` est exécutée avant l'affichage par echo. On peut aussi faire $(). La valeur de la commande est injectée dans la commande echo.
alias
alias c=clear
si je tape
c
il va exécuter
clear
Pour connaître la liste des alias existants:
alias
Il y a des alias prêts à être activés dans le fichier ~/.bashrc:
# You may uncomment the following lines if you want `ls' to be colorized: # export LS_OPTIONS='--color=auto' # eval `dircolors` # alias ls='ls $LS_OPTIONS' # alias ll='ls $LS_OPTIONS -l' # alias l='ls $LS_OPTIONS -lA' # # Some more alias to avoid making mistakes: # alias rm='rm -i' # alias cp='cp -i' # alias mv='mv -i'
Pour les activer, il suffit de les décommenter (enlever les #). Pour que cela soit actif, soit se délogguer et se relogguer, soit taper:
cd source .bashrc
Lancer des commandes a un moment precis
at
Différer l'exécution d'une tâche.
at 17:00
Il y a un prompt où on peut entrer les actions à effectuer à ce moment-là
at 17:00 > touch toto.txt >
Pour sortir: ctrl+d
Pour le faire à une heure et une date précise:
at 14:00 02/18/2005
(format de date américain: mm/dd/yyyy)
atq liste les opérations en attente (dans la queue) atrm <numero de l'opération> pour retirer un une opération.
cron
Exécution d'une tâche à un moment donné. On peut répéter les taches à intervalles définis.
Pour éditer l'agenda:
crontab -e
On se retrouve dans l'éditeur par défaut 1)?). Paramètres: min heure jour mois jour_sem commande
Pour tous les jours à 17:00:
0 17 * * * * /home/linux/backup_sim.sh
Il existe des raccourcis: @hourly: tourne toutes les heures @daily: tourne tous les jours @weekly: tourne une fois par semaine @monthly: tourne une fois par mois @yearly: tourne tous les ans @reboot: tourne quand la marchine démarre
cron se lance quoi qu'il arrive. On peut moduler la priorité avec la commande nice (ordonnancement).
anacron
Extension de cron qui, si la machine est éteinte quand elle devait faire l'action, elle sera effectuée au prochain boot. anacron lance les commandes en fonction de la charge processeur (il utilise nice).