Repository 32bit  Forum
Repository 64bit  Wiki

bash - variabili dinamiche [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
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.

bash - variabili dinamiche [RISOLTO]

Messaggioda danix » dom gen 17, 2010 14:19

non so bene come chiamare questo thread, spero che il titolo che ho dato non sia ingannevole, nel caso, mi scuso fin d'ora...
Il problema in cui sono incappato è il seguente:

In una directory ho creato 3 liste di files con find e le ho chiamate classica, rock e new_age. Le voglio dare in pasto a mpg321 in modo che riproduca i files che ci sono in quelle liste, e fin qui non ho problemi.

Adesso sto scrivendo lo script che deve lanciare mpg321 con gli argomenti corretti in base alla lista che voglio far suonare.
Lo script sarà lanciato con un unico argomento che sarà il nome della playlist che voglio suonare, ad esempio lo lancerò con:
Codice: Seleziona tutto
mioscript.sh rock

per far suonare la playlist rock.txt.
In questo script tramite una funzione salvo in 3 variabili le 3 playlist in questo modo:
Codice: Seleziona tutto
rock=/percorso/di/rock.txt
classica=/percorso/di/classica.txt
new_age=/percorso/di/new_age.txt

Grazie alla funzione che ho scritto ogni volta che lancio lo script vado a controllare se ci sono altre playlist e le importo allo stesso modo...

Il problema sorge nel momento in cui provo a lanciare mpg321 dandogli come argomento $1 in quanto la bash mi darà il valore di $1 e quindi "rock", invece io vorrei che mi desse il valore della variabile corrispondente ad $1... come faccio??

Questo è lo script:
Codice: Seleziona tutto
#! /bin/bash

E_NOPLAYLISTARG=71
E_PLAYLISTFILE_NOT_AVAILABLE=72
E_WRONGPLAYLIST=73

PLAYLISTDIR=/home/media/musica/playlists
PLAYLISTFILE=/home/danix/.myp3player/playlists.txt



show_playlists () {
        for LIST in ${PLAYLISTDIR}/* ;do
                basename $LIST |cut -d '.' -f 1
        done
}

create_playlistfile () {
        if [[ -f $PLAYLISTFILE || -s $PLAYLISTFILE ]];then
                rm -f $PLAYLISTFILE
        fi
        for LIST in ${PLAYLISTDIR}/* ;do
                echo $(basename $LIST |cut -d '.' -f 1)=$LIST >> $PLAYLISTFILE
        done
        source $PLAYLISTFILE
}

create_playlistfile

if [ -z $1 ];then
        echo "Non so quale playlist riprodurre."
        echo "Questa è la lista delle playlist disponibili"
        show_playlists
        exit $E_NOPLAYLISTARG
else
        grep $1 $PLAYLISTFILE &> /dev/null
        if [ $? -eq 0 ];then
#               while true; do
#                       mpg321 -Z --list $1
#               done
                echo $1
        else
                echo "La playlist richiesta è inesistente"
                exit $E_WRONGPLAYLIST
        fi
fi



Chi mi da una mano??
Grazie mille a tutti in anticipo!!! :)
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: bash - variabili dinamiche

Messaggioda 414N » dom gen 17, 2010 14:30

Codice: Seleziona tutto
case "$1" in
rock)
  mpg321 "$rock"
  ;;
classica)
  mpg321 "$classica"
  ;;
new_age)
  mpg321 "$new_age"
  ;;
esac

quick and dirty ;)
Ultima modifica di 414N il dom gen 17, 2010 14:40, modificato 1 volta in totale.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: bash - variabili dinamiche

Messaggioda conraid » dom gen 17, 2010 14:36

Se veramente i file sono sempre come hai messo nell'esempio puoi mettere
/percorso/di/${1}.txt

altrimenti giochi con "if-else" o "case"
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11987
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: bash - variabili dinamiche

Messaggioda danix » dom gen 17, 2010 15:16

cercavo una soluzione in cui si potesse richiamare il contenuto di una variabile tramite il contenuto di un'altra passata a runtime... siccome mi sa che sono abbondantemente oltre le mie capacità ho risolto con la soluzione
/percorso/di/${1}.txt

Grazie a tutti per l'aiuto, comunque se vi vengono in mente altre cose io ad imparare non mi tiro indietro :)
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: bash - variabili dinamiche

Messaggioda targzeta » dom gen 17, 2010 16:55

Usa:
Codice: Seleziona tutto
${!1}
Nel manuale viene chiamato come "indirect expansion", generalmente invece viene conosciuto come "variable variables".

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6147
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: bash - variabili dinamiche

Messaggioda danix » dom gen 17, 2010 18:47

MI TI COOO!!! Grande Spina, era esattamente quello che cercavo, anche se nel man bash l'ho trovato sotto l'espansione di parametro e non come "indirect expansion" di cui non sono riuscito a trovare traccia...

Ancora grazie a tutti ;)
Avatar utente
danix
Staff
Staff
 
Messaggi: 3280
Iscritto il: ven ott 27, 2006 18:32
Località: Siderno (RC)
Nome Cognome: Danilo M.
Slackware: 64 14.0
Kernel: 3.2.29
Desktop: fluxbox

Re: bash - variabili dinamiche [RISOLTO]

Messaggioda targzeta » dom gen 17, 2010 19:01

Non sono sulla mia slackware e sono collegato via ssh al server di facoltà:
Codice: Seleziona tutto
$> bash --version
GNU bash, version 3.1.14(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
quindi
Codice: Seleziona tutto
$> man bash
....
If the first character of parameter is an exclamation point, a level of
variable  indirection  is introduced.  Bash uses the value of the vari-
able formed from the rest of parameter as the  name  of  the  variable;
this  variable  is  then expanded and that value is used in the rest of
the substitution, rather than the value of parameter itself.   This  is
known as indirect expansion.  The exceptions to this are the expansions
of ${!prefix*} and ${!name[@]} described below.  The exclamation  point
must  immediately  follow the left brace in order to introduce indirec-
tion.
...
Ovviamente è sotto l'espansione di parametro.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6147
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti