[shell]script come contatore di comandi
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?
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
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
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
Interessante.
Tu quello che sai l'hai appreso da man bash e qualche libro? Me ne consiglieresti?
Con
E se volessi tenere il conto dei comandi usati, come potrei chiedere se quel comando è, ad esempio, il comando ls?
Così andrebbe bene?
//non capisco perchè a me visualizzi il codice come formule matematiche.
//ho usato il code ma anche senza faceva uguale.
Tu quello che sai l'hai appreso da man bash e qualche libro? Me ne consiglieresti?
Con
sh -c $CMDLINEeseguo 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.
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 ...
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 ...