Exemples de scripts Linux:

A mettre au début pour éviter les doublons

if [ -f /tmp/monscript.lock ]; then
echo Script deja en cours de traitement...
exit 1
fi
touch /tmp/monscript.lock
... et à la fin ...
rm /tmp/monscript.lock


Variable avec date:

AUJOURDHUI=`date "+%Y"`-`date "+%m"`-`date "+%d"`; export AUJOURDHUI
NOMLOGPROD=PROD_${AUJOURDHUI}.log


if exist:

if [ "$(ls /DATA/PrintShop/PROD/sftp_e06059/IN_SPS/ds2-inbox/*.pdf)" ]
then
mv /DATA/PrintShop/PROD/sftp_e06059/IN_SPS/ds2-inbox/*.pdf /DATA/PrintShop/PROD/data/PDF_Preview/
/DATA/PrintShop/PROD/poste/bin/envoiMails.sh
fi
... ou ...
if ls -R /DATA/PrintShop/PROD/data/XML_Sources/SLA/envoi | grep xml > /dev/null 2>&1
then
mv ....
fi
... ou ...
if [ ! -s /tmp/CreationFact.tmp ]
then
echo Rien
else
mv ....
fi


if fichier vide:

if [ -s /ccv/opt/autosys/scripts/gdbp/test_validation.tmp ]; then
echo fichier plein
else
echo fichier vide
fi


if fichier contient:

if grep -q ETIMEDOUT fichier.xml; then
echo Timeout...
exit 5
fi


Code d'erreurs:

0 Success
1 Operation not permitted
2 No such file or directory
5 Input/output error
6 No such device or address
11 Resource temporarily unavailable
13 Permission denied
14 Bad address
16 Device or resource busy
17 File exists
19 No such device
22 Invalid argument
27 File too large
28 No space left on device
70 Communication error on send
74 Bad message
100 Network is down
101 Network is unreachable
112 Host is down
114 Operation already in progress
115 Operation now in progress


Alléger un log:

# Alléger le log si plus grand que 500k

Taille=`du -sk /ccv/home/c1n6z6/LoadAverage.log |awk '{print $1}'`
if [ "$Taille" -gt "500" ]; then

# On ne garde que le dernier quart, pour ne pas effacer tout le fichier
nlignes=`cat /ccv/home/c1n6z6/LoadAverage.log | wc -l`
divparquatre=$(($nlignes / 4))
tail -$divparquatre /ccv/home/c1n6z6/LoadAverage.log>/ccv/home/c1n6z6/LoadAverage.temp
cat /ccv/home/c1n6z6/LoadAverage.temp>/ccv/home/c1n6z6/LoadAverage.log
rm -f /ccv/home/c1n6z6/LoadAverage.temp

fi


Variable avec AWK:

EnvCode=`echo $line | awk 'BEGIN{FS="\" key=\"envelope-code"} {print $1}'`


Compteur dans un fichier:

COMPTEUR=`cat /DATA/PrintShop/PROD/poste/bin/compteur.txt`; export COMPTEUR
let "COMPTEUR=COMPTEUR+1"
echo ${COMPTEUR}>/DATA/PrintShop/PROD/poste/bin/compteur.txt


Traiter des fichiers contenant un truc:

mv $(grep -Lnri "dox:doc" *) /DATA/PrintShop/PROD/poste/fichiersIncomplets


Boucle sur des fichiers:

for i in `ls -1 *.xml`
do
if cat ${i} | grep order-class | grep -v lang > /dev/null 2>&1
then
echo "LANG inexistant sur ${i}" >>/DATA/PrintShop/PROD/poste/logs/traitementXML.log
fi
done
... ou ...
for i in `cat DX* | grep invoice-personal-ref-number | awk 'BEGIN{FS="\""} {print $2}'`
do
echo "Erreur sur ${i}">>/DATA/PrintShop/PROD/poste/logs/RefPerso.log
done


Exemple sur un fichier dont il ne faut voir que les 30 premières colonnes:

CollectGroup=`echo $line | awk 'BEGIN{FS="collect-group=\""} {print $2}' | cut -c 1-30`;export CollectGroup


Lire le fichier /tmp/RetourPosteDetails.tmp ligne par ligne:

while read line
do
DateRetour=`echo $line | awk 'BEGIN{FS=" "} {print $2}'`; export DateRetour
SpsDocId=`echo $line | awk 'BEGIN{FS=" "} {print $5}'`; export SpsDocId
ProcSystem=`echo $line | awk 'BEGIN{FS=" "} {print $6}'`; export ProcSystem
if [[ $line = *idx-04* ]]
then
if [[ $line = *Envelope* ]]
then
Message="Envelope OK"
SpsDocId=`echo $line | awk 'BEGIN{FS=" "} {print $6}'`; export SpsDocId
ProcSystem=`echo $line | awk 'BEGIN{FS=" "} {print $7}'`; export ProcSystem
fi
fi
done < /tmp/RetourPosteDetails.tmp


La ligne la plus compliquée que j'ai du écrire:

cat $1 | grep -v "<\/dox>" | grep -v "sps.dox" | awk '{print $12}' | cut -d "\"" -f 2 | sed 's/\(.*\)\(.\{22\}\)/\2/' | sed -n 's/\(.........\).*/\1/p' | sort | uniq -c >>/DATA/PrintShop/PROD/poste/logs/Delivery_Report.log



Exemple avec menu:

#!/bin/bash
BOUCLE=2
while [ $BOUCLE -gt 1 ]
do
echo
echo Bienvenue dans le Super Programme de la Mort !!!
echo ===================================
echo 1 - Répertoire courant
echo 2 - date actuelle
echo 3 - gag du jour
echo 4 - Fin - ou touche q
read REPONSE
echo
echo
case $REPONSE in
1) pwd;;
2) date;;
3) echo Après 9 mois d'enquêtes, j'ai découvert en inox;;
4) BOUCLE=0;;
*)
esac
if [ $REPONSE = "q" -o $REPONSE = "Q" ]
then BOUCLE=0
fi
echo
echo
echo
done



Autre script:

AFDATE=`date +'%d'`.`date +'%m'`.20`date +'%y'`
AFHEURE=`date +'%H'`.`date +'%M'`.`date +'%S'`
echo Mise à jour le $AFDATE à $AFHEURE>publications.txt
cat /.../fichierlog.log|sort -r|grep -i "chaine"|grep -i $AFDATE>>publications.txt
ftp -vni nomserveur Fichier cmdftp:
user nomuser password
put publications.txt
close
quit




Autre script:

#!/bin/bash
echo "Je renomme tous les fichiers en minuscules"
for FILE in `find . -type f -maxdepth 1`
do
NEWFILE=`echo $FILE | tr [A-Z] [a-z]`
if test $FILE != $NEWFILE
then
echo mv $FILE $NEWFILE
fi
done




Presque pareil, j'enlève l'espace dans les noms de fichiers:

#!/bin/sh

for i in *.txt
do
j=${i//\ /__}
mv "$i" $j
done



Autre script. CheckServeur:

#!/bin/sh

# Variables a changer pour chaque machines

Serveur=Printshop
Destinataire=test.test@test.ch

# Envoi de mail
envoyer_mail () {
exec 3<>/dev/tcp/mail.tcsgroup.ch/25
echo -en "HELO mail.tcs.ch\r\n" >&3
echo -en "MAIL FROM: Automatique@tcs.ch\r\n" >&3
echo -en "RCPT TO: $Destinataire\r\n" >&3
echo -en "DATA\r\n" >&3
echo -en "Subject: Alerte $Serveur - $1\r\n" >&3
echo -en "\r\n" >&3
echo -en "Serveur: $Serveur\r\n" >&3
echo -en "$1" >&3
echo -en "\r\n" >&3
echo -en "\r\n" >&3
echo -en "Infos système:\r\n" >&3
echo -en "CPU: `cat /proc/loadavg`\r\n" >&3
echo -en "`cat /proc/meminfo | grep SwapFree`\r\n" >&3
echo -en "\r\n" >&3
echo -en ".\r\n" >&3
echo -en "QUIT\r\n" >&3
cat <&3 > mail.log
rm mail.log
}

# Check des FileSysteme plein
for i in $(seq 95 100)
do
if [ `df -h | grep $i% | grep -v Chancellerie | awk 'BEGIN{FS=" "} {print $1}' ` ]
then
envoyer_mail "`df -h | grep $i% | grep -v Chancellerie | awk 'BEGIN{FS=" "} {print $1}'` rempli a $i%\r\n"
fi
done


# Check des logs trop gros
for i in `find /var -type f -size +1024M`
do
if [ `echo $i | grep -v proc` ]
then
envoyer_mail "$i plus gros que 1Go\r\n"
fi
done


# Check CPU
CPU=`cat /proc/loadavg | sed 's/\.//g' | awk 'BEGIN{FS=" "} {print $2}'`
if [[ $CPU -gt 100 ]]
then
envoyer_mail "Alerte CPU - $CPU%"
fi

# Check Memoire
MemLibre=`cat /proc/meminfo | grep SwapFree | awk 'BEGIN{FS=" "} {print $2}'`
if [[ $MemLibre -eq 0 ]]
then
envoyer_mail "Alerte Memoire. Aucune Swap de libre"
fi






Autre script. Ping par le port 80:

#! /bin/bash

if [ -z "$1" ]
then
echo Entrez une adresse IP
exit 0
fi

if [[ "$1" == "-h" ]]
then
echo
echo -e "\\033[0;39m""***********************"
echo "* Ping sur le port 80 *"
echo "***********************"
echo "(N.Salamin - jan. 2015)"
echo
echo -e "\\033[1;31m""80ping adresseIP [-lent] [-log]"
echo -e "\\033[0;39m""-lent = Ping toutes les 5 secondes au lieu de 1, mais reduit a 1 en cas de problemes"
echo "-log = En cas de problemes, log dans le fichier report.txt"
echo "(probleme = temps de reponse superieur a 10 millisecondes)"
echo
exit 0
fi

while :
do

VAR1=`date "+%N"`
VAR1=1$VAR1

echo close>close
telnet "$1" 80 /dev/null 2>erreur.tmp
Erreur=`head -1 erreur.tmp`
rm erreur.tmp
rm close

if [[ "$Erreur" != *foreign* ]]
then
echo $Erreur
fi

VAR2=`date "+%N"`
VAR2=1$VAR2

if [ $VAR2 -gt $VAR1 ]
then
let "VAR1=VAR1/1000000"
let "VAR2=VAR2/1000000"
let "VAR3=VAR2-VAR1"
echo "$VAR3 milisecondes (telnet sur $1)"
if [[ "$2" == "-lent" ]]
then
if [ $VAR3 -gt 10 ]
then
if [[ "$3" == "-log" ]]
then
echo "$VAR3 millisecondes a `date "+%Hh%M"`" >>report.txt
fi
else
sleep 4
fi
fi
fi

sleep 1
done





Autre script:

#!/bin/bash
clear
echo
echo ----------------------
echo ¦ Salut les copains! ¦
echo ----------------------
echo
echo
echo
NOMBRE=`cat /var/spool/mail/geeko | grep '#' |wc -l`
echo -------------------------
echo ¦ Nombre de requetes: $NOMBRE ¦
echo ----------------------------------------------------------------------------------
cat /var/spool/mail/geeko | grep '#'
echo ----------------------------------------------------------------------------------
echo
echo
TODAY=`date +%m/%d/%Y`
echo "Nous sommes le $TODAY"
echo Vous avez entré $# arguments
if test $# -eq 1
then
echo votre seul argument est $1
else
echo Tous vos arguments sont $*
fi
echo
echo
echo ----------------------
echo ¦ Le Quiz de l\'hiver ¦
echo ¦ Entrez un chiffre: ¦
echo ----------------------
read CHIFFRE
echo
TABLEAU[1]='¦'
TABLEAU[2]='/'
TABLEAU[3]='-'
TABLEAU[4]='\'
TABLEAU[5]='¦'
TABLEAU[6]='/'
TABLEAU[7]='-'
TABLEAU[8]='\'
TABLEAU[9]='¦'
TABLEAU[10]='/'
TABLEAU[11]='-'
TABLEAU[12]='\'
TABLEAU[13]='¦'
TABLEAU[14]='/'
TABLEAU[15]='-'
TABLEAU[16]='\'
for ((i=1;i<=16;i++))
do
printf '\b\b'
printf ${TABLEAU[$i]}
sleep 0.1
done
printf '\b\b'
echo Reponse:
CHIFFRE2=$(($CHIFFRE+1))
echo $CHIFFRE2 - J ai gagné!!!
if test $CHIFFRE -eq 10
then
echo Ce chiffre est 10.
fi
echo
echo
ENTREE='Coucou'
until test $ENTREE = "quit"
do
printf 'da3:~ # '
read ENTREE
if test $ENTREE = "quit"
then
echo FIN DU SCRIPT!
else
echo Linux Error
fi
done