Pagina 1 di 2

Errore script bash stupido...

MessaggioInviato: mer dic 15, 2004 7:21 pm
da Ices_Eyes
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

MessaggioInviato: mer dic 15, 2004 7:28 pm
da Xerex
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ò...

MessaggioInviato: mer dic 15, 2004 7:31 pm
da Ices_Eyes
Ho controllato 27 volte gli spazi ci sono tutti, è mezz'ora che son sopra a ste tre righe... [cry+]

MessaggioInviato: mer dic 15, 2004 7:32 pm
da Ices_Eyes
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... [?]

MessaggioInviato: mer dic 15, 2004 7:43 pm
da thomas
Prova a mettere le doppie [[ e ]] invece che le singole [ e ]

MessaggioInviato: gio dic 16, 2004 8:07 pm
da Ices_Eyes
Ancora peggio... [cry]

MessaggioInviato: gio dic 16, 2004 9:15 pm
da thomas
Ices_Eyes ha scritto:Ancora peggio... [cry]

ahahahah

MessaggioInviato: gio dic 16, 2004 9:21 pm
da thomas
Con questo cosa volevi fare?
Codice: Seleziona tutto
${1##vd:*}

MessaggioInviato: ven dic 17, 2004 10:10 am
da Ices_Eyes
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...

MessaggioInviato: ven dic 17, 2004 10:14 am
da thomas
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

MessaggioInviato: ven dic 17, 2004 10:55 am
da Xerex
hai necessità di fare tutto nel minor numero di righe possibili senza "appoggiarti", magari, ad un file temporaneo, o puoi "allargarti"?

MessaggioInviato: ven dic 17, 2004 11:14 am
da Ices_Eyes
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...

MessaggioInviato: ven dic 17, 2004 11:45 am
da thomas
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

MessaggioInviato: ven dic 17, 2004 11:47 am
da thomas
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

MessaggioInviato: ven dic 17, 2004 11:51 am
da Ices_Eyes
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]

MessaggioInviato: ven dic 17, 2004 11:56 am
da thomas
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

MessaggioInviato: ven dic 17, 2004 12:00 pm
da Ices_Eyes
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+]

MessaggioInviato: ven dic 17, 2004 12:02 pm
da thomas
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:*}"

MessaggioInviato: ven dic 17, 2004 12:04 pm
da Ices_Eyes
[prego] Ok, quando vado a casa modifico e vi dico...Grazie!!!! [8D]

MessaggioInviato: ven dic 17, 2004 12:05 pm
da thomas
Ices_Eyes ha scritto:[prego] Ok, quando vado a casa modifico e vi dico...Grazie!!!! [8D]


De nada... adoro lo scripting!