Advertisement
Vladpepe

Untitled

Apr 2nd, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.15 KB | None | 0 0
  1. La parte in Shell deve prevedere un numero variabile di parametri N+1 (con N maggiore o uguale a 2):
  2. il primo parametro deve essere considerato un numero intero Y strettamente positivo, mentre gli altri N
  3. devono essere nomi assoluti di directory che identificano N gerarchie (G1, G2, …) all’interno del file
  4. system. Il comportamento atteso dal programma, dopo il controllo dei parametri, è organizzato in N fasi,
  5. una per ogni gerarchia.
  6. Il programma, per ognuna delle N fasi, deve esplorare la gerarchia Gi corrispondente - tramite un file
  7. comandi ricorsivo, FCR.sh - e deve contare globalmente tutti i file che saranno creati secondo quanto di
  8. seguito specificato. Il file comandi ricorsivo FCR.sh deve cercare in tutte le directory ogni file leggibile
  9. f
  10. 1 con lunghezza in linee maggiore o uguale Y; si dovrà quindi selezionare la singola linea numero 5 a
  11. partire dall’inizio del file che dovrà essere scritta in un file appositamente creato avente nome f.quinta;
  12. in caso, il file sia più corto e non sia possibile selezionare la linea sopra specificata bisogna creare un file
  13. vuoto di nome f.NOquinta. Al termine di tutte le N fasi, si deve riportare sullo standard output il numero
  14. totale di file creati globalmente. In seguito, per ogni file creato, si deve riportare sullo standard output il
  15. suo nome assoluto, e quindi il suo contenuto con opportune frasi che facciano capire all’utente che cosa
  16. si sta visualizzando.
  17.  
  18.  
  19. #!/bin/sh
  20. #Soluzione della Prima Prova in itinere del 11 Aprile 2018: turni 1 e 2
  21. #versione che usa un file temporaneo e usa FCR.sh per tutte le fasi
  22.  
  23. case $# in
  24. 0|1|2)  echo Errore: numero parametri is $# quindi pochi parametri. Usage is $0 Y dirass1 dirass2 ...
  25.     exit 1;;
  26. *)  echo OK: da qui in poi proseguiamo con $# parametri ;;
  27. esac
  28.  
  29. #Controllo primo parametro sia un numero
  30. case $1 in
  31. *[!0-9]*) echo Errore: $1 non numero
  32.          exit 2;;
  33. *) if test $1 -eq 0
  34.    then
  35.     echo $1 non diverso da 0
  36.     exit 3
  37.    fi;;
  38. esac
  39.  
  40. Y=$1 #salviamo il primo parametro
  41. #quindi ora possiamo usare il comando shift
  42. shift
  43.  
  44. #ora in $* abbiamo solo i nomi delle gerarchie e quindi possiamo fare i controlli sui nomi assoluti e sulle directory in un for
  45. for i
  46. do
  47.     case $i in
  48.     /*) if test ! -d $i -o ! -x $i
  49.         then
  50.         echo $i non directory
  51.         exit 4
  52.         fi;;
  53.     *)  echo $i non nome assoluto; exit 5;;
  54.     esac
  55. done
  56. #controlli sui parametri finiti possiamo passare alle N fasi
  57. PATH=`pwd`:$PATH
  58. export PATH
  59. > /tmp/conta$$ #creiamo/azzeriamo il file temporaneo. NOTA BENE: SOLO 1 file temporaneo!
  60.  
  61. for i
  62. do
  63.     echo fase per $i
  64.     #invochiamo il file comandi ricorsivo con la gerarchia, il nome relativo del file e il file temporaneo
  65.     FCR12.sh $i $Y /tmp/conta$$  
  66. done
  67.  
  68. #terminate tutte le ricerche ricorsive cioe' le N fasi
  69. #N.B. Andiamo a contare le linee del file /tmp/conta$$
  70. files=`wc -l < /tmp/conta$$`
  71. echo Il numero di file totali che sono stati creati sono = $files
  72. for i in `cat /tmp/conta$$`
  73. do
  74.         #Stampiamo (come richiesto dal testo) i nomi assoluti dei file creati
  75.         echo Creato il file $i
  76.         case $i in
  77.         *NO*) echo il file originale non conteneva almeno 5 linee e quindi il file $i e\' vuoto ;;
  78.         *)    echo il contenuto del file $i e\' il seguente\:
  79.               cat < $i ;;
  80.         esac
  81. done
  82. #da ultimo eliminiamo il file temporaneo
  83. rm /tmp/conta$$
  84. -------------------------------------------------------------------------------------------------------------------------
  85. #!/bin/sh
  86. #FCR.sh
  87. #file comandi ricorsivo che scrive il nome dei file creati sul file temporaneo
  88. #il cui nome e' passato come terzo argomento
  89. NL=     #variabile in cui salviamo il numero di linee del file corrente
  90. cd $1 #ci posizioniamo nella directory giusta
  91.  
  92. for i in *
  93. do
  94.     if test -f $i -a -r $i
  95.     then
  96.         NL=`wc -l < $i`
  97.         if test $NL -ge $2
  98.         then
  99.             if test $NL -ge 5
  100.             then
  101.                 head -5 $i | tail -1 > $i.quinta
  102.                 echo `pwd`/$i.quinta >> $3
  103.             else
  104.                 > $i.NOquinta
  105.                 echo `pwd`/$i.NOquinta >> $3
  106.             fi
  107.         fi
  108.     fi
  109. done
  110. for i in *
  111. do
  112.     if test -d $i -a -x $i
  113.     then
  114.         #chiamata ricorsiva cui passiamo come primo parametro il nome assoluto del direttorio
  115.         FCR12.sh `pwd`/$i $2 $3
  116.     fi
  117. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement