|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2056
|
[aiuto per esame] comando shell getops
ciao,
ho un dubbio ! A cosa servono i due punti in getopts . Cioè : tra getopts “:ab:c” OPTION getopts abc OPTION cosa cambia ? Spero possiate darmi una mano ! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Ciao,
i : servono per dire a getopts che ciò che c'é dopo è l'argomento dell'opzione passata. Esempio: getopts ab:c vuol dire che c è l'argomento dell'opzione b comando -a -b y (getopts ab:y) I : possono essere prima di tutto (getopts :ab:c): in questo caso attivi il silent mode (quindi niente erorri a schermo e messaggi, utile in produzione...) Spero sia chiaro ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2056
|
Grazie !
![]() Quindi getops ab:c vuol dire che volendo posso fare Codice:
comanda -a -b c o comando -a o comando -b c Ho un altra domanda relativa ai comandi shell ![]() devo fare un piccolo esercizio dove controllare ogni 30 secondi se l'utente passato come argomento abbia eseguito il logout Io ho scritto questo : Codice:
#!/bin/bash UTENTE=$1 #utente passato per argomento while [ true ]; do who | grep -c $UTENTE if [ $? -eq 0 ];then break else echo "loggato ancora" sleep 5 continue fi done echo "$UTENTE logout" Ma con mio stupore mettendo un echo $? prima dell'if mi sono reso conto che ciò che viene stampato da $? è 1 e non il risultato del comando precedente che è 0 . Cosa sbaglio ? |
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Codice:
risultato=`who | grep -c $1` In realtà $? ritorna il return status della funzione chiamata: grep ritorna 0 se non ci sono stati errori, 1 se nessun match è stato trovato. 2 in caso di errore. Quote:
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
Ultima modifica di kwb : 03-04-2013 alle 10:29. |
||
![]() |
![]() |
![]() |
#5 | ||
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Quote:
Quote:
Il tuo script funziona in modo inverso da come pensi tu. who | grep -c $UTENTE stampa il numero di righe per ogni $UTENTE loggato. Quindi 0 se l'utente non è loggato, 1 se è loggato 1 volta, 2 se è loggato 2, e cos' via. Quindi se al posto di -eq metti -ne funziona come dovrebbe. Comunque come ha detto Kwb salva il risultato del who | grep in una variabile. $1 in questo caso funziona perchè (credo) sia in una pipe con un counting. Ciaoo Ultima modifica di airon : 03-04-2013 alle 10:50. |
||
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2056
|
grazie mille di tutto
![]() siete stati chiarissimi ! |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Quello che dovrebbe fare lui è controllare che il risultato sia uguale a 1 ( grep non ha trovato nessun match ) e non 0.
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
![]() |
![]() |
![]() |
#8 | ||
Senior Member
Iscritto dal: Feb 2004
Città: milano
Messaggi: 2148
|
Quote:
Quote:
$? ha 0 se grep -c ha come risultato un match (quindi almeno una riga, quindi utente loggato) mentre 1 se non ha trovato utenti. |
||
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2006
Messaggi: 2056
|
si anche secondo me se metto in una variabile evito ambiguità :
Codice:
risultato=`who | grep -c $1` ![]() un ultimissimo dubbio : in un case su opzioni getopt ace opt se voglio accettare anche la possibilità di concatenare le azioni di tutte e 3 le opzioni : cioè Codice:
while getopts ace opt do case "$opt" in a) stampa c) giravolta e) pluto *) sbagliato esac done Codice:
./comando -ace in una lezione il prof mise al posto di *) \?) \? a cosa serve ? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:07.