Pagina 1 di 2

BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 16:21
da danix
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 ;)

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 16:42
da Zeros
Ciao,

echo ${1:-4}

ricevi gli ultimi 4 caratteri della variabile stringa $1

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 16:43
da Ansa89

Codice: Seleziona tutto

if [ ! -z $1 ];then
  if echo $1 | egrep -q ".ext$" ; then
    ...

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 16:44
da Mario Vanoni
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 ???

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 16:45
da conraid
if [ ${1##*.} == "ext" ]; then

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 16:47
da Ansa89
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.

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 17:06
da Mario Vanoni
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!

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 17:13
da danix
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

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 17:37
da Mario Vanoni
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!

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 17:38
da danix
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:

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 17:50
da Ansa89
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
$

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 18:02
da danix
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... :)

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 18:10
da targzeta
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

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 19:46
da Mario Vanoni
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

Re: BASH - verifica stringa con espansione caratteri jolly

Inviato: mer 26 mag 2010, 20:45
da targzeta
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