Spiegazione su variabili Shell

Il ritrovo della comunità dove confrontarsi e discutere sulle notizie dal mondo dell'informatica, di Ubuntu e di tutto quello che la riguarda, novità, pettegolezzi e quant'altro.
Scrivi risposta
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Spiegazione su variabili Shell

Messaggio 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
Insidioso93
Avatar utente
ErSandro
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 553
Iscrizione: venerdì 3 aprile 2009, 12:48
Contatti:

Re: Spiegazione su variabili Shell

Messaggio 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  ???
Avatar utente
il_muflone
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 18878
Iscrizione: venerdì 1 maggio 2009, 15:31
Desktop: GNOME Shell
Distribuzione: Arch Linux x86_64
Località: Profondo sud
Contatti:

Re: Spiegazione su variabili Shell

Messaggio 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.
Ultima modifica di il_muflone il martedì 31 agosto 2010, 16:37, modificato 1 volta in totale.
http://www.muflone.com - I miei contatti e i miei progetti - La guida completa a VirtualBox
Non mandatemi messaggi privati per chiedere aiuto, li cancello senza rispondere nemmeno.
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio 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
Insidioso93
Avatar utente
il_muflone
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 18878
Iscrizione: venerdì 1 maggio 2009, 15:31
Desktop: GNOME Shell
Distribuzione: Arch Linux x86_64
Località: Profondo sud
Contatti:

Re: Spiegazione su variabili Shell

Messaggio 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.
http://www.muflone.com - I miei contatti e i miei progetti - La guida completa a VirtualBox
Non mandatemi messaggi privati per chiedere aiuto, li cancello senza rispondere nemmeno.
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio da Insidioso93 »

Non ho ben capito il tuo esempio Muflone....

abbi pazienza  :-[  ti prego
Insidioso93
Avatar utente
ErSandro
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 553
Iscrizione: venerdì 3 aprile 2009, 12:48
Contatti:

Re: Spiegazione su variabili Shell

Messaggio 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.
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio da Insidioso93 »

Ah quindi le variabili $1...$2...ecc vengono considerate dalla shell come gli argomenti di ingresso....capito....
Insidioso93
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio 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
Insidioso93
Avatar utente
il_muflone
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 18878
Iscrizione: venerdì 1 maggio 2009, 15:31
Desktop: GNOME Shell
Distribuzione: Arch Linux x86_64
Località: Profondo sud
Contatti:

Re: Spiegazione su variabili Shell

Messaggio da il_muflone »

visto che hai difficoltà a usare l'apice roverso `
usa al suo posto
VAR1=$(expr $1 + $2)
è anche molto più leggibile
http://www.muflone.com - I miei contatti e i miei progetti - La guida completa a VirtualBox
Non mandatemi messaggi privati per chiedere aiuto, li cancello senza rispondere nemmeno.
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio da Insidioso93 »

Il metodo da te utlizzato è quello delle stringhe? che metodo è ?
Ultima modifica di Insidioso93 il martedì 31 agosto 2010, 17:35, modificato 1 volta in totale.
Insidioso93
Avatar utente
il_muflone
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 18878
Iscrizione: venerdì 1 maggio 2009, 15:31
Desktop: GNOME Shell
Distribuzione: Arch Linux x86_64
Località: Profondo sud
Contatti:

Re: Spiegazione su variabili Shell

Messaggio 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
http://www.muflone.com - I miei contatti e i miei progetti - La guida completa a VirtualBox
Non mandatemi messaggi privati per chiedere aiuto, li cancello senza rispondere nemmeno.
Avatar utente
DaNieL85
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 300
Iscrizione: sabato 2 febbraio 2008, 12:18

Re: Spiegazione su variabili Shell

Messaggio da DaNieL85 »

mi iscrivo  ;D
You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio da Insidioso93 »

DaNieL85 ha scritto: mi iscrivo  ;D
cosa significa?
Insidioso93
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio 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?
Insidioso93
Avatar utente
DaNieL85
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 300
Iscrizione: sabato 2 febbraio 2008, 12:18

Re: Spiegazione su variabili Shell

Messaggio 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)
You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
Avatar utente
Insidioso93
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 442
Iscrizione: domenica 27 giugno 2010, 20:33
Località: Milano

Re: Spiegazione su variabili Shell

Messaggio da Insidioso93 »

idolo  (b2b)
Insidioso93
Avatar utente
Elrond
Rampante Reduce
Rampante Reduce
Messaggi: 5018
Iscrizione: sabato 22 novembre 2008, 12:32
Contatti:

Re: Spiegazione su variabili Shell

Messaggio 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
Il mio blog su Ubuntu | Script per vedere canali RAI in diretta senza browser (discussione)
Quando devi inserire nei messaggi del codice usa il tag code, è il pulsante # sopra le emoticon: [code]inserisci il testo qui[/code]
Avatar utente
DaNieL85
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 300
Iscrizione: sabato 2 febbraio 2008, 12:18

Re: Spiegazione su variabili Shell

Messaggio 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
You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
Scrivi risposta

Ritorna a “Bar Ubuntu”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 3 ospiti