Repository 32bit  Forum
Repository 64bit  Wiki

BASH - verifica stringa con espansione caratteri jolly

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 - verifica stringa con espansione caratteri jolly

Messaggioda danix » mer mag 26, 2010 15:21

Ciao a tutti,
da quel poco che ho capito non si può fare l'espansione dei caratteri in una verifica, ma a me servirebbe, ad esempio, ho questa situazione:
lo script pippo.sh va lanciato con un argomento che sia un altro script con estensione .ext da cui fare il source, io vorrei verificare che, se lo script non finisce per .ext, pippo.sh esca restituendo un errore.

a prima vista farei così:
Codice: Seleziona tutto
if [ ! -z $1 ];then
  if [[ $1 == "*.ext" ]];then
    ...

ma ovviamente non funziona, allora ho pensato di usare egrep in questo modo:
Codice: Seleziona tutto
if [ ! -z $1 ];then
  if egrep -q ".ext$" "$1";then
    ...

ma anche questo non va... :(
come consigliate di fare??


Grazie mille 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 - verifica stringa con espansione caratteri jolly

Messaggioda Zeros » mer mag 26, 2010 15:42

Ciao,

echo ${1:-4}

ricevi gli ultimi 4 caratteri della variabile stringa $1
Zeros
Linux 2.0
Linux 2.0
 
Messaggi: 107
Iscritto il: dom mar 05, 2006 2:22
Località: Roma
Slackware: 12.1
Kernel: 2.6.24.5
Desktop: Kde

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda Ansa89 » mer mag 26, 2010 15:43

Codice: Seleziona tutto
if [ ! -z $1 ];then
  if echo $1 | egrep -q ".ext$" ; then
    ...
Avatar utente
Ansa89
Iper Master
Iper Master
 
Messaggi: 2621
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.16.1-ck1
Desktop: XFCE 4.6.1

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda Mario Vanoni » mer mag 26, 2010 15:44

Molto semplicistico
Codice: Seleziona tutto
#!/bin/sh
if [ ! -e ${1}.ext ]
then
        echo ERROR
else
        echo EXIST
fi

chiamo pippo, se non esiste pippo.ext ...
chiami pippo.ext da ERROR

Non capisco perche' nel test usi l'opzione -z ???
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda conraid » mer mag 26, 2010 15:45

if [ ${1##*.} == "ext" ]; then
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11996
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda Ansa89 » mer mag 26, 2010 15:47

Mario Vanoni ha scritto:Non capisco perche' nel test usi l'opzione -z ???

Con "-z" controlla che il parametro sia stato passato, in seguito controlla che il parametro sia corretto.
Avatar utente
Ansa89
Iper Master
Iper Master
 
Messaggi: 2621
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.16.1-ck1
Desktop: XFCE 4.6.1

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda Mario Vanoni » mer mag 26, 2010 16:06

Ansa89 ha scritto:
Mario Vanoni ha scritto:Non capisco perche' nel test usi l'opzione -z ???

Con "-z" controlla che il parametro sia stato passato, in seguito controlla che il parametro sia corretto.

man test
Codice: Seleziona tutto
  -z STRING
              the length of STRING is zero

quindi con
if [ ! -z $1 ];then
controlla solo se un parametro non vuoto esiste!

con [ ! -e ${1}.ext ] ...
sai subito che il file non esiste ed esci subito dal programma.
Vecchia regola, al primo errore uscire!
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda danix » mer mag 26, 2010 16:13

Mario Vanoni ha scritto:
Ansa89 ha scritto:
Mario Vanoni ha scritto:Non capisco perche' nel test usi l'opzione -z ???

Con "-z" controlla che il parametro sia stato passato, in seguito controlla che il parametro sia corretto.

man test
Codice: Seleziona tutto
  -z STRING
              the length of STRING is zero

quindi con
if [ ! -z $1 ];then
controlla solo se un parametro non vuoto esiste!

con [ ! -e ${1}.ext ] ...
sai subito che il file non esiste ed esci subito dal programma.
Vecchia regola, al primo errore uscire!

forse è ridondante come l'ho scritto, ma a me serve anche sapere se un parametro è stato passato o meno... Il codice che ho scritto nell'esempio è un estratto di quello che sto scrivendo... ;)


Grazie a tutti per le soluzioni proposte :D
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 - verifica stringa con espansione caratteri jolly

Messaggioda Mario Vanoni » mer mag 26, 2010 16:37

danix ha scritto:forse è ridondante come l'ho scritto, ma a me serve anche sapere se un parametro è stato passato o meno...

Ma ti serve sapere veramente se un parametro e` stato passato,
o IMVHO se il file necessario e` presente o no?

Con o senza parametro, con test -e hai la risposta!
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda danix » mer mag 26, 2010 16:38

Mario Vanoni ha scritto:
danix ha scritto:forse è ridondante come l'ho scritto, ma a me serve anche sapere se un parametro è stato passato o meno...

Ma ti serve sapere veramente se un parametro e` stato passato,
o IMVHO se il file necessario e` presente o no?

Con o senza parametro, con test -e hai la risposta!

mi serve sapere se un parametro è stato passato... :roll:
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 - verifica stringa con espansione caratteri jolly

Messaggioda Ansa89 » mer mag 26, 2010 16:50

Mario Vanoni ha scritto:Con o senza parametro, con test -e hai la risposta!

Se lo script passato come parametro è nella stessa directory, ma se è uno script dentro $PATH l'opzione "-e" non funziona:
Codice: Seleziona tutto
$if [ -e ls ]; then echo "asd" ; fi
$
Avatar utente
Ansa89
Iper Master
Iper Master
 
Messaggi: 2621
Iscritto il: mer ago 29, 2007 16:57
Località: Modena
Nome Cognome: Stefano Ansaloni
Slackware: 13.1
Kernel: 3.16.1-ck1
Desktop: XFCE 4.6.1

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda danix » mer mag 26, 2010 17:02

infatti nello script che sto buttando giù verifico che ci sia un argomento (e che sia valido e leggibile) oppure che ci sia lo script in questione nella directory in cui è stato lanciato il programma... :)
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 - verifica stringa con espansione caratteri jolly

Messaggioda targzeta » mer mag 26, 2010 17:10

danix ha scritto:Ciao a tutti,
da quel poco che ho capito non si può fare l'espansione dei caratteri in una verifica
allora hai capito veramente poco :lol:
danix ha scritto:...a prima vista farei così:
Codice: Seleziona tutto
if [ ! -z $1 ];then
  if [[ $1 == "*.ext" ]];then
    ...

ma ovviamente non funziona
Prova con:
Codice: Seleziona tutto
if [ ! -z $1 ];then
  if [[ $1 == *".ext" ]];then
    ...
Portando l'asterisco fuori dalla quotatura (altrimenti pensa che cerchi un '*' no?).

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: 6156
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 - verifica stringa con espansione caratteri jolly

Messaggioda Mario Vanoni » mer mag 26, 2010 18:46

bash(1), csh(1), ksh(1) e test(1) non sono concordi sui test multipli, sic!
Con bash(1) con una riga sola funziona
Codice: Seleziona tutto
#!/bin/sh
if [[ ! -z ${1} ]] && [[ -e ${1}.ext ]]
then
        echo EXISTS
else
        echo ERROR
fi

pippo
ERROR
pippo ee
ERROR
pippo pippo
EXISTS
Ultima modifica di Mario Vanoni il mer mag 26, 2010 21:04, modificato 1 volta in totale.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggioda targzeta » mer mag 26, 2010 19:45

Mario Vanoni ha scritto:bash(1), csh(1), ksh(1) e test(1) non sono concordi sui test multipli, sic!...
Beh, questa è una bella scoperta e mi fa piacere per te Mario, ma che c'entra con il thread in questione?

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: 6156
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron