#!/bin/bash # Usage: esame fileToSearch S M dir1 … dirN ### CONTROLLO ARGOMENTI # Controllo numero argomenti if [[ $# -le 3 ]]; then echo "Errore: numero di argomenti non corretto" echo -e "Usage:\n\t$0 fileToSearch S M dir1 … dirN" exit 1 fi fileToSearch=$1 S=$2 M=$3 shift 3 for dir in $@ do # Controllo if [[ ! "$dir" = /* ]] then echo "Errore parametro: $dir deve essere un path assoluto" exit 1 fi if ! [[ -d $dir ]]; then echo "Errore parametro: $dir non è una directory" exit 3 fi done # Controllo che il terzo argomento sia un intero positivo if [[ $S = *[!0-9]* ]] ; then echo "Errore parametro S: $S non è un intero positivo" 1>&2 exit 1 elif [[ $M = *[!0-9]* ]]; then echo "Errore parametro M: $M non è un intero positivo" 1>&2 exit 1 fi ### FINE CONTROLLO ARGOMENTI outfile="$HOME/$$$fileToSearch.log" > "$outfile" # In questo caso, se avessi utilizzato test oppure [, # che sono comandi esterni, non avrei avuto l'espansione dell'*, # in quanto l'espansione dei metacaratteri avviene dopo l'esecuzione # di comandi in bash. if [[ "$0" = /* ]] ; then #Iniziando con /, si tratta di un path assoluto #(eg /home/andrea/recurse_dir.sh) #Estrazione di parti di path: man dirname oppure man basename dir_name=`dirname "$0"` recursive_command="$dir_name/do_recurse_dir.sh" elif [[ "$0" = */* ]] ; then # C'è uno slash nel comando, ma non inizia con /. Path relativo dir_name=`dirname "$0"` recursive_command="`pwd`/$dir_name/do_recurse_dir.sh" else # Non si tratta ne di un path relativo, ne di uno assoluto. # E' un path "secco": il comando sarà dunque cercato # nelle cartelle indicate dalla variabile d'ambiente $PATH. recursive_command=do_recurse_dir.sh fi i=1 while [[ $i -le "$M" ]] do echo "volta: $i" # Invoco il comando ricorsivo for dir in $@ do "$recursive_command" "$dir" "$fileToSearch" "$outfile" done echo "Aspetto $S secondi" sleep "$S" i=`expr $i + 1` done