[shell]script come contatore di comandi

joya89
Buongiorno,
ho bisogno di uno script che, una volta chiamato, conti i comandi che vengono successivamente letti ed eseguiti dalla shell.
Come posso avviare uno script lasciando che questo consideri tutti i comandi che lo seguono fino a un comando prestabilito di terminazione?

Risposte
Rggb1
Puoi semplicemente usare un contatore, poi fai una read in una variabile e la esegui tipo

read CMDLINE
sh -c \$CMDLINE

in un ciclo, controllando un valore particolare che ti fa uscire dallo stesso. Pe.

while read CMDLINE && [ \$CMDLINE != 'FINE' ]; do sh -c \$CMDLINE; done

PS. 'man bash' is your friend

joya89
Interessante.
Tu quello che sai l'hai appreso da man bash e qualche libro? Me ne consiglieresti?
Con
sh -c $CMDLINE
eseguo il comando?
E se volessi tenere il conto dei comandi usati, come potrei chiedere se quel comando è, ad esempio, il comando ls?
Così andrebbe bene?
if [  $CMDLINE = 'ls' ] then ...
O si comporta diversamente?



//non capisco perchè a me visualizzi il codice come formule matematiche.
//ho usato il code ma anche senza faceva uguale.

Rggb1
Niente libri nel mio caso, esperienza e manpages. Anche l'help in linea di bash è comodo (digita proprio 'help') se vuoi avere riferimenti rapidi a come fare le cose.

Se vuoi qualcosa di più evoluto (pe. usare parametri) devi ovviamente aggiungere dei caratteri di quoting per es.

while read CMDLINE && [ "\$CMDLINE" != "FINE" ]; do sh -c "\$CMDLINE"; done

L'esempio che hai fatto va bene, ovviamente anche lì considera, oltre alla quotatura della variabile-comando, la posizione dei parametri: se digiti "ls pippo*" la stringa non corrisponde a "ls" ma il comando è effettivamente ls, quindi magari

c=0; while read CMDNAME PARAMS && [ "\$CMDNAME" != "FINE" ]; do sh -c "\$CMDNAME \$PARAMS"; [ "\$CMDNAME" == "ls" ] && ((c++)) ; done

che conta i comandi ls anche se digiti "ls pippo"

PS. Per evitare il codice io uso un carattere di barra rovesciata prima del carattere dollaro ...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.