|
|
|
![]() |
|
Strumenti |
![]() |
#1 | ||
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Aiutatemi a preparare il mio esame
Salve a tutti, a giorni dovrei sostenere un esame di UNIX e avrei bisogno di una mano nello svolgere alcuni esercizi che posterò di seguito con i miei dubbi. Se avete un pò di pazienza per starmi dietro per risolvere questi semplici quesiti (vi chiedo un minuto del vostro tempo
![]() ![]() Parto dal primo esercizio: Quote:
ls -R | wc -l Ma l'istruzione ricorsiva "ls-R" mi conta anche i files oltre che le sottodirectory. Qualche soluzione? _______________________ Quote:
Ultima modifica di :.Blizzard.: : 17-07-2007 alle 23:49. |
||
![]() |
![]() |
![]() |
#2 | ||
Senior Member
Iscritto dal: Jul 2006
Messaggi: 407
|
Quote:
Quote:
Per verificarlo $ echo 'echo "Ciao"'> script $ chmod u+x script $ sh script /usr/bin/script: /usr/bin/script: cannot execute binary file dprina@localhost:~$ . script bash: ELF: command not found Nota: l'errore che ritorna ". script" è dovuto al fatto che script è un comando. Vedere. $ man script Per verificare che lo script creato funzioni: $ ./script Ciao Questo perché di default in ogni installazione GNU/Linux e Unix la directory corrente non è mai inclusa nel path ... ed includerla comporta un rischio di sicurezza. Se eseguo: 1) $ ./script eseguo lo script nella directory corrente utilizzando l'interprete dei comandi corrente nel mio caso: $ echo $SHELL /bin/bash 2) $ script eseguo lo script nel path ($ echo $PATH) utilizzando l'interprete dei comandi corrente 3) $ sh script chiama l'interprete sh per l'esecuzione dello script (non è necessario che lo script abbia i permessi di esecuzione) utilizzando sh come interprete dei comandi. Eseguo lo script nella directory corrente Quindi se eseguo $ echo 'echo "Ciao"'> script1 $ ./script1 bash: ./script1: No such file or directory $ sh script1 Ciao Notare che l'istruzione così creata dipende molto da cosa è "sh" $ type sh sh is hashed (/bin/sh) $ ls -l /bin/sh lrwxrwxrwx 1 root root 4 2006-12-18 20:18 /bin/sh -> bash Quindi su un'installazione GNU/Linux sh di default punta a bash Chiamando sh in realtà si chiama bash. Bisogna stare attenti che chiamando sh si disabilitano le estensioni specifiche di bash e quindi si potrebbe avere, come conseguenza, che lo script non funzioni correttamente. 4) $ . script il comando . è un built-in di bash e altre shell ed equivale al comando source 5) $ source script Il comando source permette: I) se è all'interno di uno scritp: di includere il file indicato II) se è usato sulla riga di comando: di eseguire lo script Eseguo lo script prima cercandolo nel $PATH e se non lo trova nella directory corrente le differenze rispetto agli altri metodi di esecuzione di un comando sono: a) non apre una nuova shell per l'esecuzione, ma esegue in quella corrente Per capire questo faccio un piccolo esempio $ PIPPO=1 $ echo $PIPPO 1 $ sh $ echo $PIPPO $ exit exit $ echo $PIPPO 1 come puoi vedere aprendo una nuova shell (comando "$ sh")entro in un ambiente totalmente diverso e a sé stante e ritorno alla shell precedente con il comando exit. Eseguendo uno script nelle modalità elencate nei punti 1-4 in pratica viene aperta una nuova shell dove viene eseguito lo script. E alla terminazione dello script ritorna alla shell precedente b) come conseguenza di a) è possibile far ritornare un valore allo script con il comando "return" perché la shell resta sempre la stessa c) se è eseguito all'interno di uno script (source script), allora il controllo ritornerà allo script che l'ha chiamato appena l'esecuzione sarà terminata d) nello script ci deve essere indicato come eseguire lo script stesso e questo si ricava dalla prima riga, ad esempio: #!/bin/bash 6) $ sh < script1 Questa istruzione è simile a "$ sh script1" con l'unica differenza che viene disabilitata la lettura dallo standard input Eseguo lo script nella directory corrente Penso di aver detto più o meno tutto ... almeno tutto quello che conosco a riguardo. Ciao Davide
__________________
Strumenti linguistici e altro: dizionari, thesaurus, template, FAQ, News, ... Esci dall'illegalità: utilizza OpenOffice.org - Fate una prova di guida e tenetevi la macchina! Elenco di software libero - GNU/Linux User: 302090 Ultima modifica di Davide.Prina : 18-07-2007 alle 08:38. |
||
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
grazie, sei stato gentilissimo. Ora leggo con calma e cerco di capire. Se non ti dispiace più in là magari posto altri esercizi se hai voglia di darmi una mano - puoi essere anche più generico e riassuntivo, non importa - te ne sarei grato.
Ciauuu |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2004
Città: Roma
Messaggi: 333
|
siccome forse stiamo preparando lo stesso esame, posto alcune domande (penso pertineti al topic)
ho cercato nel file system delle librerie generiche e mi è sembrato che tutte hanno avessero estensione .h, è così? per librerie generiche intendo collezione di funzioni, prototipi ed altro |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 407
|
sbagliato.
I .h sono gli header e non le librerie. Gli header permettono di creare programmi che poi, nella fase di link, utilizzano le librerie. Le librerie le trovi, ad esempio, sotto /usr/lib L'estensione di solito è .so, so.X.Y..., .a, .la, ... In generale le librerie possono essere statiche o dinamiche: le prime vengono incluse all'interno dell'eseguibile, mentre le seconde sono chiamate al momento dell'esecuzione (di solito è usato quest'ultimo metodo). Ciao Davide |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Quote:
if(($argv[1]=="A" || $argv[1]=="a")) then grep A $argv[2] | wc -l endif else if (($argv[1]=="B" || $argv[1]=="b")) then ls -l $argv[2] >> filestampa lpr filestampa endif else echo "opzione inesistente" So' di aver fatto un disastro ... ma non so proprio metterci mano. Oltretutto, coma faccio a chiamare uno script da riga di comando passandogli argomenti? (in questo caso A o B) ![]() ![]() |
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Aug 2004
Città: Roma
Messaggi: 333
|
Quote:
![]() Grazie per la risposta ![]() |
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jul 2006
Messaggi: 407
|
[quote]
Quote:
if(($argv[1]=="A" || $argv[1]=="a")) then grep A $argv[2] | wc -l endif else if (($argv[1]=="B" || $argv[1]=="b")) then ls -l $argv[2] >> filestampa lpr filestampa endif else echo "opzione inesistente" [quote] non conosco csh 1) se l'opzione deve essere -A o -B, allora quando fai il confronto devi tenere conto anche del - 2) nel grep devi controllare che le righe inizino per A e non che contengano A 3) secondo me hai sbagliato nell'impostazione del costrutto if ... then ... else 4) secondo me hai sbagliato i confronti 5) non ho capito perché ridirigi l'output in append e non usi invece una pipe ma hai provato ad eseguire il tuo script? Le cose le devi capire e quando sviluppi fai per gradi, un pezzo per volta e lo provi per vedere se funziona. Ciao Davide |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Leggo solo ora la risposta. Grazie. Stamattina cmq ho studiato meglio la csh e sono riuscito a fare lo script da me e a farlo partire correttamente da linea di comando
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:43.