Pagina 1 di 1

Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 16:25
da Insidioso93
Ciao a tutti , sono sempre il solito rompiscatole che non capisce quello che legge....

Questa volta non ho capito una sezione riguardante le variabili shell del mio famoso libro di UNIX...

In particolare non ho capito la spiegazione data dalla wiki http://wiki.ubuntu-it.org/Programmazione/LinguaggioBash
Riguardanti le variabili $* $N $# $@

allora $N è un numero intero che definisce l'Nessimo argomento passato da terminale ad un programma....
innanzi tutto non ho capito cosa si intende per argomento non ho poi capito la sua differenza con $# che indica contiene il numero di argomenti passati da terminale al programma...

Non ho poi capito cosa s'intende per quotare gli argomenti di un programma, riferito alla spiegazione della variabile $@...

detto questo vorrei anche sapere il perchè queste variabili non rientrano nell'insieme delle variabili d'ambiente ossia...ogni volta che si apre un processo questo eredita dal padre le variabili di ambiente ma queste sopraindicate da dove provengono ? Vengono inizializzate dai file di inizializzazione e basta (come .profile e .bashrc) ?

grazie in anticipo per le risposte



saluti

Insidioso93

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 16:35
da ErSandro
Per quel che posso ti aiuto facendo un piccolo esempio.

Immangina di aver creato uno script chiamato "prodotto" per fare le moltiplicazioni che richiede due argomenti (i numeri da moltiplicare tra loro).

Supponi di volergli passare i due argomenti al momento in cui lo lanci:

Codice: Seleziona tutto

prodotto 16 2
All'interno dello script $1 sarà uguale a 16, $2 sarà uguale a 2 e $# sarà uguale al numero di argomenti passati (in questo caso di nuovo 2).

Il vantaggio sta nel fatto che ogni volta che invochi lo script puoi passargli argomenti differenti.

Per quanto riguarda $@....non saprei  ???

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 16:35
da il_muflone
ciao

immagina un programma qualsiasi, ad esempio
cp "nome del file" destinazione

se cp fosse un batch...
$0 = cp
$1 = nome del file
$2 = destinazione
$# = 2 (ovvero gli argomenti, oltre il nome del programma)
$* = nome del file destinazione (ovvero tutti gli argomenti)
$@ = nome del file destinazione (vedi sotto)

quotare significa suddividere.
per comprendere la differenza tra $* e $@ considera questo esempio

Codice: Seleziona tutto

#!/bin/bash
echo prova con \$*
for p in "$*"
do
  echo parametro: $p
done

echo prova con \$@
for p in "$@"
do
  echo parametro: $p
done

Codice: Seleziona tutto

bash prova.sh "nome del file" destinazione
prova con $*
parametro: nome del file destinazione
prova con $@
parametro: nome del file
parametro: destinazione
con $@ i parametri vengono distinti, con $* i parametri restano uniti in uno solo.

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 16:56
da Insidioso93
Intanto vi ringrazio... succissivamente avevo trovato un esempio per l'utilizzo di $@ sempre sul libro...

in pratica veniva utilizzato il comando set 'comando'
gli apici erano rovesciati....

In pratica viene scritto che con questo comando viene riempita la variabile $@ che quota i parametri...
l'esempio era con il comando date ...
facendo poi l'echo di $1 $2 ecc....si vedevano le varie informazioni singole passate dal comando date. (Ho infatti creato lo script che mi consente di vedere all'entrata nella shell solo l'ora di sistema senza veder tutte le informazioni legate a date).

Per quanto riguarda l'esempio di ErSandro...come è possibile creare il programma da te citato che prende gli argomenti in fase di esecuzione? Quindi per argomenti si intendeva quello che avevo pensato ossia, semplicemente, quello che viene passato dall'input al programma....

grazie ancora

saluti

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 16:59
da il_muflone
Insidioso93 ha scritto:Per quanto riguarda l'esempio di ErSandro...come è possibile creare il programma da te citato che prende gli argomenti in fase di esecuzione?
non ho capito la domanda.
un esempio te l'ho indicato poco fa, se vuoi stampare i valori delle variabili usa echo $1, $* e  così via.

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:01
da Insidioso93
Non ho ben capito il tuo esempio Muflone....

abbi pazienza  :-[  ti prego

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:02
da ErSandro
Lo fa in automatico.

Se dai quel comando e dentro lo script usi le variabili $1 e $2 ci penserà la shell stessa a valorizzarle nel modo corretto.

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:06
da Insidioso93
Ah quindi le variabili $1...$2...ecc vengono considerate dalla shell come gli argomenti di ingresso....capito....

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:25
da Insidioso93
...ho capito cosa volevate dirmi....finalemente  8) (scusate ma ho avuto una giornata pesante)

Quindi ho eseguito l'esempio di ErSandro....

ho creato il programma som che, pratica, esegue la somma degli argomenti dati il codice è questo:

Codice: Seleziona tutto

VAR1='expr $1 + $2'
echo VAR1
so che è una cavolata...però ho capito


grazie ancora a tutti

ciao

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:27
da il_muflone
visto che hai difficoltà a usare l'apice roverso `
usa al suo posto
VAR1=$(expr $1 + $2)
è anche molto più leggibile

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:32
da Insidioso93
Il metodo da te utlizzato è quello delle stringhe? che metodo è ?

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 17:40
da il_muflone
ho solo copiato quel che hai scritto tu
invece di
VAR1=`expr $1 + $2`
puoi usare
VAR1=$(expr $1 + $2)
fa la stessa cosa ma è più facile sia da scrivere che da leggere

Re: Spiegazione su variabili Shell

Inviato: martedì 31 agosto 2010, 19:38
da DaNieL85
mi iscrivo  ;D

Re: Spiegazione su variabili Shell

Inviato: giovedì 2 settembre 2010, 18:57
da Insidioso93
DaNieL85 ha scritto: mi iscrivo  ;D
cosa significa?

Re: Spiegazione su variabili Shell

Inviato: giovedì 2 settembre 2010, 19:00
da Insidioso93
Ho ancora una domanda...quindi il comando set (di cui avevo parlato sopra) oltre a permettere di vedere le variabili d'ambiente definite dall'utente e di default permette did "riempire" le variaili $1 ecc ossia $@ con gli argomenti passati dal programma al terminale, in pratica fa l'opposto...

giusto?

Re: Spiegazione su variabili Shell

Inviato: giovedì 2 settembre 2010, 19:24
da DaNieL85
Insidioso93 ha scritto:
DaNieL85 ha scritto: mi iscrivo  ;D
cosa significa?
che l'argomento mi interessa, mi 'scrivo' in modo da avere gli sviluppi via mail e da poter rintracciare in futuro il 3d dalla mia mail ;D (si, sono pigro)

Re: Spiegazione su variabili Shell

Inviato: giovedì 2 settembre 2010, 19:41
da Insidioso93
idolo  (b2b)

Re: Spiegazione su variabili Shell

Inviato: giovedì 2 settembre 2010, 19:50
da Elrond
Insidioso93 ha scritto: Ho ancora una domanda...quindi il comando set (di cui avevo parlato sopra) oltre a permettere di vedere le variabili d'ambiente definite dall'utente e di default permette did "riempire" le variaili $1 ecc ossia $@ con gli argomenti passati dal programma al terminale, in pratica fa l'opposto...

giusto?
Sì, set permette anche di modificare i parametri posizionali dello script. Vedi un esempio di applicazione qui: http://www.pluto.it/files/ildp/guide/ab ... tml#SETREF
DaNieL85 ha scritto:
Insidioso93 ha scritto:
DaNieL85 ha scritto: mi iscrivo  ;D
cosa significa?
che l'argomento mi interessa, mi 'scrivo' in modo da avere gli sviluppi via mail e da poter rintracciare in futuro il 3d dalla mia mail ;D (si, sono pigro)
Se vuoi ricevere le notifiche via mail basta premere il pulsanti NOTIFICA, affianco a RISPOSTA, senza bisogno di scrivere nulla nel thread

Re: Spiegazione su variabili Shell

Inviato: giovedì 2 settembre 2010, 20:01
da DaNieL85
Elrond ha scritto:
Insidioso93 ha scritto: Ho ancora una domanda...quindi il comando set (di cui avevo parlato sopra) oltre a permettere di vedere le variabili d'ambiente definite dall'utente e di default permette did "riempire" le variaili $1 ecc ossia $@ con gli argomenti passati dal programma al terminale, in pratica fa l'opposto...

giusto?
Sì, set permette anche di modificare i parametri posizionali dello script. Vedi un esempio di applicazione qui: http://www.pluto.it/files/ildp/guide/ab ... tml#SETREF
DaNieL85 ha scritto:
Insidioso93 ha scritto:
DaNieL85 ha scritto: mi iscrivo  ;D
cosa significa?
che l'argomento mi interessa, mi 'scrivo' in modo da avere gli sviluppi via mail e da poter rintracciare in futuro il 3d dalla mia mail ;D (si, sono pigro)
Se vuoi ricevere le notifiche via mail basta premere il pulsanti NOTIFICA, affianco a RISPOSTA, senza bisogno di scrivere nulla nel thread
mi piace scriverlo, è un pò come "vi stò osservando" ;D