Quelques exemples de scripts

Tester la présence d’un lien, sinon le créer

if test ! -e /etc/cron.weekly/majlisterpm
then
ln -s /root/majlisterpm /etc/cron.weekly/majlisterpm
fi
Réaliser un test
JOUR=`date +%A`
if test $JOUR = "lundi" -o $JOUR = "mardi" ;
then
               echo "nous sommes lundi ou mardi"
fi

Autre syntaxe :

if [ "$JOUR" = "lundi" ] || [ "$JOUR" = "mardi" ]

Ma préférence va à la première syntaxe, mais chacun fait ce qu’il veut...

La commande test (ou [ ] )

chaine1 = chaine2 : vraie si chaine1 est égale a chaine2

chaine1 != chaine2 : vraie si chaine1 n’est pas égale à chaine2

pour les entiers (integer) :

n1 -eq n2 : vraie si n1 est égal a n2

n1 -ne n2 : vraie si n1 est diffèrent de n2

n1 -gt n2 : vraie si n1 est plus grand strictement a n2

n1 -ge n2 : vraie si n1 est plus grand ou égal à n2

n1 -lt n2 : vraie si n1 est plus petit strictement a n2

n1 -le n2 : vraie si n1 est plus petit ou égal à n2

-o : OR

-a : AND

-f :est un fichier ordinaire

-d :est un répertoire

-p :est une représentation interne d’un dispositif de communication

-c :est un pseudo-fichier du type accès caractère par caractère

-b :est un pseudo-fichier du type accès par bloc

-L :est un lien symbolique

-u : son Set UID=1

-g :son Set GID=1

-k :son Sticky Bit=1

-s :est non-vide

-z chaîne : la chaîne est vide

-w chaîne : la chaîne est non vide

Lancer des commandes sur une liste de serveurs distants

A partir d’un serveur, on a recopié au préalable la clé publique (/root/.ssh/id_dsa.pub) vers les serveurs distants, dans /root/.ssh/authorized_keys, pour pouvoir s’identifier par échange de clés et sans avoir besoin de taper des mots de passe.

Création d’un fichier listeserveurs, avec, sur chaque ligne, le nom du serveur à atteindre.

Création d’un script à exécuter sur le serveur distant (ce script va modifier l’adresse de destination des messages systèmes envoyés depuis Postfix, en modifiant le fichier aliases) :

cp /etc/postfix/aliases /etc/postfix/aliases.old
sed s/^root:.*$/"root: monadresse@mondomaine.fr"/ /etc/postfix/aliases.old > /etc/postfix/aliases

Le fichier est rendu exécutable :

chmod +x commandedistante.sh

Le code du script permettant d’exécuter ce fichier sur les serveurs distants :

for serveur in $(cat listeserveurs)
do
       echo "serveur en cours de traitement : "$serveur
       scp commandedistante.sh $serveur:/root/
       ssh $serveur /root/commandedistante.sh
done

Créer une arborescence à partir d’un fichier contenant la liste des dossiers

Un fichier texte en entrée, on veut rajouter devant chaque ligne la commande mkdir, et le signe " de part et d’autre de la ligne

while read ligne
do
echo "mkdir -p " \"$ligne\" >>creation_arbo.sh
done < creation_arbo.txt

Supprimer des fichiers dans une arborescence

find /var/log/samba/winbind*gz -exec rm -f {} \;

Obtenir la taille occupée par un type de fichier dans une arborescence

Pour calculer la taille occupée par un type de fichiers, par exemple les fichiers jpg, dans une arborescence :

ls -lR /opt/donnees | grep 'jpg' | awk '{ sum += $5 } END { print sum }'