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.
Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

BASH - verifica stringa con espansione caratteri jolly

Messaggio 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 ;)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Zeros
Linux 1.x
Linux 1.x
Messaggi: 107
Iscritto il: dom 5 mar 2006, 2:22
Slackware: 12.1
Kernel: 2.6.24.5
Desktop: Kde
Località: Roma

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio da Zeros »

Ciao,

echo ${1:-4}

ricevi gli ultimi 4 caratteri della variabile stringa $1

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio da Ansa89 »

Codice: Seleziona tutto

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

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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 ???

Avatar utente
conraid
Staff
Staff
Messaggi: 13630
Iscritto il: gio 14 lug 2005, 0:00
Nome Cognome: Corrado Franco
Slackware: current64
Desktop: kde
Località: Livorno
Contatta:

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio da conraid »

if [ ${1##*.} == "ext" ]; then

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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.

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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!

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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!

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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:
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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
$

Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 5.4.43 x86_64
Desktop: i3
Località: Siderno (RC)
Contatta:

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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... :)
danix
myself ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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
Ultima modifica di Mario Vanoni il mer 26 mag 2010, 22:04, modificato 1 volta in totale.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: BASH - verifica stringa con espansione caratteri jolly

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi