Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Errore script bash stupido...

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

Errore script bash stupido...

Messaggioda Ices_Eyes » mer dic 15, 2004 7:21 pm

Qualcuno di voi sa dirmi perché questo stupidissimo script bash mi da come risultato
Codice: Seleziona tutto
./list.sh: line 2: [: `)' expected, found ]

dove list.sh è il mio file che contiene questo codice?
Codice: Seleziona tutto
#!/bin/bash
if [ \( "$#" -ne 1 \) -o \( ! -z ${1##vd:*} \) ]; then
   ls $@;
else
   echo "qui collegarsi al virtual disk";
fi



fromtheflames: spostato in programmazione
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda Xerex » mer dic 15, 2004 7:28 pm

Può essere un problema di spazi?
te lo dico perché è sempre stato uno degli errori più frequenti che subivo...

la sintassi non me la ricordo per niente però...
Fare la grigliata, è sempre una figata!
Avatar utente
Xerex
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5948
Iscritto il: lun ago 05, 2002 9:36 am
Località: Parma(Pr)

Messaggioda Ices_Eyes » mer dic 15, 2004 7:31 pm

Ho controllato 27 volte gli spazi ci sono tutti, è mezz'ora che son sopra a ste tre righe... [cry+]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia


Messaggioda Ices_Eyes » mer dic 15, 2004 7:32 pm

Dimenticavo l'errore l da nel caso in cui chiami
./list.sh vd:<qualcosa>
./list.sh
non lo da invece in tutti gli altri casi..., quindi con parametri qualsiasi... [?]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » mer dic 15, 2004 7:43 pm

Prova a mettere le doppie [[ e ]] invece che le singole [ e ]
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Ices_Eyes » gio dic 16, 2004 8:07 pm

Ancora peggio... [cry]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » gio dic 16, 2004 9:15 pm

Ices_Eyes ha scritto:Ancora peggio... [cry]

ahahahah
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda thomas » gio dic 16, 2004 9:21 pm

Con questo cosa volevi fare?
Codice: Seleziona tutto
${1##vd:*}
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Ices_Eyes » ven dic 17, 2004 10:10 am

Devo controllare se la prima parte del primo argomento è "vd:"...Quindi prendo l'argomento $1, ne elimino la parte finale più lunga che inizia con vd: e vedo se la stringa è vuota...
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » ven dic 17, 2004 10:14 am

Ices_Eyes ha scritto:Devo controllare se la prima parte del primo argomento è "vd:"...Quindi prendo l'argomento $1, ne elimino la parte finale più lunga che inizia con vd: e vedo se la stringa è vuota...


e quel ${1##vd:*} fa tutto questo? azz... non immaginavo
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Xerex » ven dic 17, 2004 10:55 am

hai necessità di fare tutto nel minor numero di righe possibili senza "appoggiarti", magari, ad un file temporaneo, o puoi "allargarti"?
Fare la grigliata, è sempre una figata!
Avatar utente
Xerex
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5948
Iscritto il: lun ago 05, 2002 9:36 am
Località: Parma(Pr)

Messaggioda Ices_Eyes » ven dic 17, 2004 11:14 am

fromtheflames ha scritto:e quel ${1##vd:*} fa tutto questo? azz... non immaginavo


In realtà quello elimina solo la parte finale del parametro $1 ecc...Il controllo se è vuoto il risultato lo fa il -z dell'if...

Xerex ha scritto:hai necessità di fare tutto nel minor numero di righe possibili senza "appoggiarti", magari, ad un file temporaneo, o puoi "allargarti"?

Lo script dovrà sostituirsi al normale ls di linux (poi dovrò farlo per cp, mkdir, rm...) perché devo poter gestire, nel caso di determinati prefissi, un disco virtuale in modo trasparente all'utente...Quindi il tutto nel minor numero di file possibile...
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » ven dic 17, 2004 11:45 am

Ices_Eyes ha scritto:
fromtheflames ha scritto:e quel ${1##vd:*} fa tutto questo? azz... non immaginavo


In realtà quello elimina solo la parte finale del parametro $1 ecc...Il controllo se è vuoto il risultato lo fa il -z dell'if...

Dal man di bash
${parameter##word}
The word is expanded to produce a pattern just as in pathname
expansion. If the pattern matches the beginning of the value of
parameter, then the result of the expansion is the expanded
value of parameter with the shortest matching pattern (the ``#''
case) or the longest matching pattern (the ``##'' case) deleted.
If parameter is @ or *, the pattern removal operation is applied
to each positional parameter in turn, and the expansion is the
resultant list. If parameter is an array variable subscripted
with @ or *, the pattern removal operation is applied to each
member of the array in turn, and the expansion is the resultant
list.


Tu intendi questo, vero?
Se quel comando rimuove l'occorrenza più lunga della sottostringa (ovvero vd:* - che a me fa venire in mente tutte le stringhe che cominciano con "vd:", il che non so se sia esattamente quello che cerchi), la stringa che ti rimane sarà vuota per ogni nome di file/cartella che comincia con "vd:" es: vd:1, vd:gianna, ecc...

Ices_Eyes ha scritto:
Xerex ha scritto:hai necessità di fare tutto nel minor numero di righe possibili senza "appoggiarti", magari, ad un file temporaneo, o puoi "allargarti"?

Lo script dovrà sostituirsi al normale ls di linux (poi dovrò farlo per cp, mkdir, rm...) perché devo poter gestire, nel caso di determinati prefissi, un disco virtuale in modo trasparente all'utente...Quindi il tutto nel minor numero di file possibile...

Se le specifiche ti indicano chiaramente di fare uno script bash è un conto, altrimenti questo sarebbe un lavoro per il C
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda thomas » ven dic 17, 2004 11:47 am

Aggiungo: se lo script deve sostituirsi ad "ls" bada ben che la versione che hai sviluppato fin'ora prevede un solo parametro.... non dimenticarti di fare quel controllo *per tutti* i parametri
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Ices_Eyes » ven dic 17, 2004 11:51 am

Quello che voglio è proprio corretto, quindi mi serve identificare tutte le stringhe ce iniziano per vd:.
Inoltre, nel caso in cui ci sia più di un parametro dovrà essere richamato l'ls di linux normale, qualsiasi parametro ci sia dopo, perché l'ls del disco virtuale non prevede parametri...
L'unico problema è appunto quell'errore che da... [:p]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » ven dic 17, 2004 11:56 am

Ices_Eyes ha scritto:Quello che voglio è proprio corretto, quindi mi serve identificare tutte le stringhe ce iniziano per vd:.
Inoltre, nel caso in cui ci sia più di un parametro dovrà essere richamato l'ls di linux normale, qualsiasi parametro ci sia dopo, perché l'ls del disco virtuale non prevede parametri...
L'unico problema è appunto quell'errore che da... [:p]


Codice: Seleziona tutto
#!/bin/bash
if [ \( "$#" -ne 1 \) -o \( ! -z "${1##vd:*}" \) ]; then
        ls $@;
else
        echo "qui collegarsi al virtual disk";
fi

Così a me funzia
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Ices_Eyes » ven dic 17, 2004 12:00 pm

hai cambiato qualcosa o è uguale al mio? E se è uguale al mio, funziona anche se lo richiami senza parametri o con vd:???
A me da quell'errore...!!!! [cry+]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » ven dic 17, 2004 12:02 pm

Ices_Eyes ha scritto:hai cambiato qualcosa o è uguale al mio? E se è uguale al mio, funziona anche se lo richiami senza parametri o con vd:???
A me da quell'errore...!!!! [cry+]

Le virgolette attorno al secondo parametro "${1##vd:*}"
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Messaggioda Ices_Eyes » ven dic 17, 2004 12:04 pm

[prego] Ok, quando vado a casa modifico e vi dico...Grazie!!!! [8D]
Avatar utente
Ices_Eyes
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 5543
Iscritto il: ven ott 24, 2003 10:37 am
Località: Prov. di Venezia

Messaggioda thomas » ven dic 17, 2004 12:05 pm

Ices_Eyes ha scritto:[prego] Ok, quando vado a casa modifico e vi dico...Grazie!!!! [8D]


De nada... adoro lo scripting!
"Am too late to get too high to get, too late to wash my face and hands "
Mr Hudson and the Library - Too Late Too Late
Avatar utente
thomas
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 6858
Iscritto il: mer lug 09, 2003 6:30 pm
Località: Parma

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Google [Bot] e 1 ospite

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising