Pages: [1]   Go Down
Print
Author Topic: Esercizio script bash  (Read 2167 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
esteta84
Apprendista Forumista
**
Offline Offline

Posts: 284



« on: 04-03-2011, 08:42:46 »

Ciao ragazzi, come risolvereste questo script?

Creare uno script di shell che opera su due parametri della riga di comando, ovvero: $1 il nome di una directory e $2 il nome di un'altra directory.
Ognuno dei file x contenuti nella directory $1 deve essere controllato con il comando file, per stabilire se si tratta di un file "ASCII text".
In caso affermativo, se x ha data di modifica più recente della directory $2, va copiato in essa, convertendo in maiuscolo tutti i caratteri in esso #contenuti.
Per la conversione minuscolo-maiuscolo si utilizzi il comando tr.
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 04-03-2011, 09:18:06 »

oldPwd=$(pwd)
cd $1
for x in *
do file $x | grep "ASCII text" > /dev/null 2> /dev/null && [ $x -nt $2 ] && cat $x | tr '[:lower:]' '[:upper:]' > $2\$x
done
cd $oldPwd
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
androidiano
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 482


WWW
« Reply #2 on: 05-03-2011, 10:00:19 »

oldPwd=$(pwd)
cd $1
for x in *
do file $x | grep "ASCII text" > /dev/null 2> /dev/null && [ $x -nt $2 ] && cat $x | tr '[:lower:]' '[:upper:]' > $2\$x
done
cd $oldPwd
Credo ci siano due piccoli errori in questa soluzione:
1) Se $2 è un path relativo il codice nel DO non funziona più
2) Nell'ultima redirezione dell'output la barra \ è al contrario (dovrebbe essere / )

Questo dovrebbe correggere i due problemi:
#!/bin/sh
for x in `ls $1 -1`
do file $1/$x | grep "ASCII text" > /dev/null 2> /dev/null && [ $1/$x -nt $2 ] && cat $1/$x | tr '[:lower:]' '[:upper:]' > $2/$x
done
Logged

Twitter | Last.fm | Notizie condivise | Riduzioni Cinema a Catania: su Facebook e su Twitter  | Google+
esteta84
Apprendista Forumista
**
Offline Offline

Posts: 284



« Reply #3 on: 05-03-2011, 12:04:59 »

Io l'ho fatto così, che è molto simile alla vostra soluzione:

Code:
fileD1=`ls $1`

for varD1 in $fileD1
do

if (file $1/$varD1 | grep "ASCII text" >/dev/null) && (test $1/$varD1 -nt $2)
then
echo "vero"
cat $1/$varD1 | tr '[:lower:]''[:upper:]' | >$2/$varD1

fi
done


ma quando lo eseguo mi da questo errore:

tr: manca l'operando dopo "[:lower:][:upper:]"
Devono essere fornite due stringhe durante la traduzione.
Usare «tr --help» per ulteriori informazioni.

Il man non è tanto chiaro sull'uso di tr con i rispettivi parametri  testate
Logged
androidiano
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 482


WWW
« Reply #4 on: 05-03-2011, 12:11:11 »

Semplicemente manca uno spazio tra [:lower:] e [:upper:]
Ma invece il | alla fine di tr prima della redirezione che scopo ha?
Logged

Twitter | Last.fm | Notizie condivise | Riduzioni Cinema a Catania: su Facebook e su Twitter  | Google+
esteta84
Apprendista Forumista
**
Offline Offline

Posts: 284



« Reply #5 on: 05-03-2011, 12:25:44 »

scusa ho riletto bene stavo per dire una fesseria... ora provo
Logged
esteta84
Apprendista Forumista
**
Offline Offline

Posts: 284



« Reply #6 on: 05-03-2011, 12:32:37 »

ok ho provato, funziona.
Il pipe lo avevo messo per dare in pasto l'output dei precedenti comandi al redirect ma, se lo metto, copia una stringa vuota nel file di destinazione. Quindi hai doppiamente ragione

Grazie 1000
« Last Edit: 05-03-2011, 19:00:12 by esteta84 » Logged
androidiano
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 482


WWW
« Reply #7 on: 05-03-2011, 18:22:01 »

Di nulla. Con i pipe dai in pasto l'output del primo comando al secondo comando come input; nella redirezione non c'è questa necessità: ti serve solo che l'ultimo output vada rediretto su file, quindi non usi il pipe ma l'operatore di redirezione dello standard output >
Logged

Twitter | Last.fm | Notizie condivise | Riduzioni Cinema a Catania: su Facebook e su Twitter  | Google+
Pages: [1]   Go Up
Print
Jump to: