BASH : Barre de progression simple

Script BASH pour afficher une barre de progression lors du traitement d'une liste de fichiers

#! /usr/bin/env bash
terminal=false
tty -s;
if [ "0" == "$?" ]; then terminal=true ;fi
if [[ $terminal = true ]] ; then
   DIALOG=${DIALOG=dialog}
else
   DIALOG=${DIALOG=gdialog}
fi
[ -n "$DEBUG" ] && set -x
i=0
j=0
k=0
int=0
  fichtemp=`tempfile 2>/dev/null` || fichtemp=/tmp/test$$
    trap "rm -f $fichtemp" 0 1 2 5 15
	fichtemp2=`tempfile 2>/dev/null` || fichtemp2=/tmp/test2$$
    trap "rm -f $fichtemp2" 0 1 2 5 15
  IFS=$'\n'
  # Récupération du nombre d'inodes avec la commande STAT
  stat -L /* -fc %c > $fichtemp2
  # Totalisation du nombre d'inodes
  for line in `cat $fichtemp2` ;
    do
      i=$(( i + line)) 
  done
  (
    # La première itération de la commande ls sert pour le décompte des inodes
    ls -Ibin -Ilib -Iproc -Irun -Isys -Itmp -I.snapshots -alR / 2>/dev/null > $fichtemp2 &
    # La seconde itération de la commande ls est la commande 'utile'
    ls -Ibin -Ilib -Iproc -Irun -Isys -Itmp -I.snapshots -alR / 2>/dev/null | grep '\/.git\/' | sed -e 's/\/.git.*$/\//p' |uniq | sed -e 's/$/|/g' | sed -e ':a;N;$!ba;s/\n//g' >$fichtemp
  ) |
  while [[ "$int" -lt 99 ]];
   do
    j=$(sed -n '$=' "$fichtemp2")
    # Comme la commande peut être utilisée sans privilèges certeins inodes ne pourront être parcourus
    # Il faut donc ajuster le décompte pour tenir compte de la différence entre le nombre d'inodes 
    # existants et ceux décomptés
    if [[ $k == $j ]]; then i=$((i-((i-j)/100))) ; fi
    k=$j  
    p=$(echo "scale=2 ; $j / $i * 100" | bc)
    int=${p%.*}
    echo "$int"
    [[ $int -gt 99 ]] && break
    done | 
    if [ -t 0 ] ; then
      dialog --title "Gauge" --gauge "Wait please..." 10 60 0
    else
      zenity --progress --title="Update System Logs" --percentage=0
    fi
clear
set +x