scrivere un comando con le sue opzioni con sh

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

è spiegato in man bash; :P
dopo aver fatto man bash, per cercare dove si parla di shift digita /shift; per passare da uno "shift" al successivo, digita n

dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

Scusatemi le domande ripetitive. Vi assicuro che sto leggendo, chiedo senza prima aver capito di non aver capito :shock:
Come si deve interpretare il comando
eval set -- ciao come stai?

e perchè

Avatar utente
urka58
Linux 3.x
Linux 3.x
Messaggi: 543
Iscritto il: mer 7 dic 2005, 23:29

Messaggio da urka58 »

In pratica vengono valutati tutti gli paramentri del comando in successione, quindi per primo $1, dopodichè $1 "sparisce" e quello che era $2 diventa $1 che poi sparisce a sua volta, per far si che $3 che diventerà prima $2 sarà nel frattempo sarà diventato $1 ... e così via fino ad esaurimento dei parametri. L'unico parametro che non viene "shiftato" è $0 che resta immutato.
E' più difficile da spiegare che altro...
Ciao

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6644
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

Ragazzi,
ho letto tutti post e non sono riuscito a capire cosa vuoi fare!!!
Che significa per te "comando di shell"?
Mi potresti fare un esempio di quello che vuoi che accada?

Spina

Salvo
Linux 0.x
Linux 0.x
Messaggi: 30
Iscritto il: sab 7 gen 2006, 17:55

Messaggio da Salvo »

Bella sta cosa dello shift.
Io l'avrei fatto con: for i in $*
ma così è più elegante.

Comunque in bash non so come si fa, ma in c bisogna vedere se il primo carattere è '-' e fare il controllo sui restanti caratteri, in modo da poter leggere direttamente "-abc" piuttosto che "-a -b -c"

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6644
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

Salvo ha scritto: ...ma così è più elegante.

Comunque in bash non so come si fa, ma in c bisogna vedere se il primo carattere è '-' e fare il controllo sui restanti caratteri, in modo da poter leggere direttamente "-abc" piuttosto che "-a -b -c"
...a proposito di eleganza.

In C, per beccare le opzioni bisognerebbe usare la funzione getopt, e per quelle con il formato lungo (--casa) si usa getopt_long.
man 3 getopt, per maggiori informazioni.

Analogamente, per la shell esiste il comando getopt (e non getopts che è il comando interno della bash) per prelevare le opzioni da riga di comando, è
ammesso anche in questo caso il formato lungo tramite l'opzione -l.
man 1 getopt per maggiori informazioni.

Spina

Rispondi