Exercices des scripts shell

Script simple

  1. Ecrire un script qui copie tous vos fichiers du jour dans une archive "backup_yymmjj" ou yymmjj est remplacé par la date du jour

#!/bin/bash -x

#

# Backup simple

# 20 juin 2007

FILE=/tmp/file2backup

STAMP=$(date +"%Y%m%d%H%M%S")


echo $STAMP tar -cPf back-${STAMP} $(find $HOME -type f -mtime -1)

#2ème solution

#find $HOME -mtime -1 | xargs tar -cPf back-${STAMP}


rm $FILE

  1. Ecrire un script qui calcul la taille des dossiers dans le répertoire courant et qui tri le résultat par taille décroissante

#!/bin/bash

#

# Liste la taille des dossiers à partir d'un path passé en paramètre

# 20 juin 2007

PARAM_DOSSIER=$1


echo "Total du dossier ${PARAM_DOSSIER} = $(du -s $PARAM_DOSSIER|cut -f1)"


for DIR in $(ls -F ${PARAM_DOSSIER} | grep "/")

do

 #echo $DIR

 du -S -h --max-depth=1 $DIR 2> /dev/null

done



Script complexe

  1. Ecrire un script qui affiche les arguments en entrée du script, d'abord avec des if puis avec un while

avec un "if"


#!/bin/bash

echo 0 : $0

if [ -n "$1" ] ; then echo 1 : $1 ; fi

if [ -n "$2" ] ; then echo 2 : $2 ; fi

if [ -n "$3" ] ; then echo 3 : $3 ; fi

if [ -n "$4" ] ; then echo 4 : $4 ; fi

if [ -n "$5" ] ; then echo 5 : $5 ; fi

if [ -n "$6" ] ; then echo 6 : $6 ; fi

if [ -n "$7" ] ; then echo 7 : $7 ; fi

if [ -n "$8" ] ; then echo 8 : $8 ; fi

if [ -n "$9" ] ; then echo 9 : $9 ; fi

if [ -n "${10}" ] ; then echo 10 : ${10} ; fi



avec un "while"


#!/bin/bash

while [ $# -ne 0 ];

do

 echo $1

 shift

done

  1. Ecrire un script qui efface les lignes vides

#!/bin/bash

file=$1


while read line

do

  echo $line | grep -v "^$"

done < $file

  1. Ecrire un script qui imprime un fichier (donnée en argument) avec une entête (nom du fichier, date d'impression, nom de l'utilisateur)
    -f fichier : prépare un fichier de sortie mais n'envoie pas à l'imprimante
    -u user : change l'utilisateur
	#!/bin/bash 
user=$USER
while [ $# -ne 0 ]
do
  case $1 in
  -f)
  shift
  file_output=$1
  if [ -e $file_output ]
  then
  rm -f $file_output
  fi
  ;;
  -u)
   shift
   user=$1
  ;;
  *)
  echo "" >> $file_output
  echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> $file_output
  echo "File:$1 Date:`date` User:$user" >> $file_output
  echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" >> $file_output
  cat $1 >> $file_output
  ;;
  esac
  shift
done

  1. Ecrire un mini interpréteur "basich" qui réalise les opérations suivantes :
    • ls pour liste les fichiers
    • mv pour rennomer un fichier
    • rm pour effacer un fichier
    • vi pour visualiser le contenu d'un fichier
    • lo pour sortir de l'interpréteur
	#!/bin/bash 
echo -n "Basich>"
while read cmd arg1 arg2
do
 case $cmd in
  ls)
  ls
  ;;
  cp)
  if [ "$arg1" != "" -a "$arg2" != "" ]
  then
  cp $arg1 $arg2
  else
  echo "Usage: cp file-src file-dst" fi
  ;;
  mv)
  if [ "$arg1" != "" -a "$arg2" != "" ]
  then
  mv $arg1 $arg2
  else
echo "Usage: mv file-src file-dst"
fi
;;
rm)
if [ "$arg1" != "" ]
then
rm $arg1
else
echo "Usage: rm file"
fi
;;
vi)
vi $arg1
;;
lo)
exit
;;
*)
echo "command not found"
;;
esac
echo -n "Basich>"
done

Modifié le: lundi 15 juillet 2013, 23:30