conditional statement
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
conditional statement
perdonate la rottura sembra una domanda a cui rispondere con rtfm...
i manuali li ho letti ma nn trovo la corretta spiegazione
qual è la giusta regola per creare una espressione condizionale data da più di una espressione negli script bash?
per intenderci il costrutto che mi serve è in java
if ((a > 5) && (b<=2))
then {....}
allora nel mio script bash sto usando:
if [ ($a -gt 5) -a ($b -le 2) ]
then
...
fi
perchè e sintatticcamente sbagliato?
qualcuno mi spiega le regole per mettere + di una conzione in and o in or?
Grazie
i manuali li ho letti ma nn trovo la corretta spiegazione
qual è la giusta regola per creare una espressione condizionale data da più di una espressione negli script bash?
per intenderci il costrutto che mi serve è in java
if ((a > 5) && (b<=2))
then {....}
allora nel mio script bash sto usando:
if [ ($a -gt 5) -a ($b -le 2) ]
then
...
fi
perchè e sintatticcamente sbagliato?
qualcuno mi spiega le regole per mettere + di una conzione in and o in or?
Grazie
- masalapianta
- Iper Master

- Messaggi: 2775
- Iscritto il: lun 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: conditional statement
if [ $a -gt 5 ] && [ $b -le 2 ]; thenrdlkino ha scritto:perdonate la rottura sembra una domanda a cui rispondere con rtfm...
i manuali li ho letti ma nn trovo la corretta spiegazione
qual è la giusta regola per creare una espressione condizionale data da più di una espressione negli script bash?
per intenderci il costrutto che mi serve è in java
if ((a > 5) && (b<=2))
then {....}
allora nel mio script bash sto usando:
if [ ($a -gt 5) -a ($b -le 2) ]
then
...
fi
perchè e sintatticcamente sbagliato?
qualcuno mi spiega le regole per mettere + di una conzione in and o in or?
Grazie
ecc...
- targzeta
- Iper Master

- Messaggi: 6643
- 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: conditional statement
omasalapianta ha scritto:...
if [ $a -gt 5 ] && [ $b -le 2 ]; then
ecc...
Codice: Seleziona tutto
[ $a -gt 5 -a $b -le 2 ]Codice: Seleziona tutto
[[ $a -gt 5 && $b -le 2 ]]Codice: Seleziona tutto
[ \( $a -gt 5 \) -a \( $b -le 2 \) ]quindi l'uso delle parentesi tonde per specificare la precedenza degli operatori è consentita ma....( EXPRESSION )
EXPRESSION is true
SpinaBeware that parentheses need to be escaped (e.g., by backslashes) for shells.
P.S. noooo java nooooo
continuo sulla stessa scia...
piccolo problema:
conosco il nome di un file, link, directory ma in maniera case insensitive...
sia "piPpo" il nome di un file nel file system
potrebbe essere che il nome che io conosca sia "piPPO"
io devo poter accedere a questo file e in linux posso fare per esempio
cat [Pp][Ii][Pp][Pp][Oo]
e son sicuro di visualizzare il contenuto.
Bene.
mettiamo che io invece voglia verificare l'esistenza di tale file all'interno di uno script bash
ed abbia gli stessi problemi di misconoscenza del nome (non conoscenza del "case" delle lettere)
volevo utilizzare
if [ -e /dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo] ]
then
....
fi
ma non funziona!
come posso fare?
piccolo problema:
conosco il nome di un file, link, directory ma in maniera case insensitive...
sia "piPpo" il nome di un file nel file system
potrebbe essere che il nome che io conosca sia "piPPO"
io devo poter accedere a questo file e in linux posso fare per esempio
cat [Pp][Ii][Pp][Pp][Oo]
e son sicuro di visualizzare il contenuto.
Bene.
mettiamo che io invece voglia verificare l'esistenza di tale file all'interno di uno script bash
ed abbia gli stessi problemi di misconoscenza del nome (non conoscenza del "case" delle lettere)
volevo utilizzare
if [ -e /dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo] ]
then
....
fi
ma non funziona!
come posso fare?
- danix
- Staff

- Messaggi: 3289
- Iscritto il: ven 27 ott 2006, 19:32
- Nome Cognome: Danilo M.
- Slackware: 64 current
- Kernel: 6.12.13 x86_64
- Desktop: i3
- Località: Verona (VR)
- Contatta:
non puoi usare "grep -i" ??
mettiamo caso che la tua dir si trovi in /home/utente e si chiami directory
mettiamo caso che la tua dir si trovi in /home/utente e si chiami directory
Codice: Seleziona tutto
home=/home/utente
dir=$(ls $home |grep -i directory)
cd $dir
- Paoletta
- Staff

- Messaggi: 3975
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
puoi usare un workaround (tipo questo):
per maggiori info: man find 
Codice: Seleziona tutto
var=`find dir1/dir2/dir3 -iname "NOMEFILE"`
if [ $var ]
then
...
fi
Rettifico alcune cose:
la cosa che ho scritto funziona da plurime prove
io scrivo
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e $var1 ]
then
...
fi
tuttavia non funziona se scrivo
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e "$var1" ]
then
...
fi
e non capisco perchè (primo problema)
Supponiamo ora che /dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo] sia un link simbolico
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e $var1 ]
then
...
fi
il risultato dell'espressione condizionale nell ' if è FALSE:
il motivo è che $var1 viene così espanso (notato da un test con echo)
echo $var1
/dir1/dir2/dir3/nome_link path_a_cui_punta_il_link
^
qui c'è uno spazio bianco!
accade quindi che il test vede 2 argomenti e mi viene detto che il test si aspettava un operatore binario
Invece a
echo "$var1" corrisponde
/dir1/dir2/dir3/nome_link
tuttavia come detto prima se nel test metto le virgolette doppie questo non funziona come ci si attenderebbe...
come posso risolvere per eseguire correttamente il test in caso di link simbolico?
Grazie
la cosa che ho scritto funziona da plurime prove
io scrivo
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e $var1 ]
then
...
fi
tuttavia non funziona se scrivo
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e "$var1" ]
then
...
fi
e non capisco perchè (primo problema)
Supponiamo ora che /dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo] sia un link simbolico
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e $var1 ]
then
...
fi
il risultato dell'espressione condizionale nell ' if è FALSE:
il motivo è che $var1 viene così espanso (notato da un test con echo)
echo $var1
/dir1/dir2/dir3/nome_link path_a_cui_punta_il_link
^
qui c'è uno spazio bianco!
accade quindi che il test vede 2 argomenti e mi viene detto che il test si aspettava un operatore binario
Invece a
echo "$var1" corrisponde
/dir1/dir2/dir3/nome_link
tuttavia come detto prima se nel test metto le virgolette doppie questo non funziona come ci si attenderebbe...
come posso risolvere per eseguire correttamente il test in caso di link simbolico?
Grazie
- Paoletta
- Staff

- Messaggi: 3975
- Iscritto il: lun 25 apr 2005, 0:00
- Slackware: 14.2 - 64 bit
- Desktop: fluxbox
- Località: Varese
non funziona perchè il comando test non digerisce le parentesi quadre in questione, che tu passi attraverso la variabile var; test è fatto per testare una condizione, find per trovare i files; i programmi di linux sono fatti per far bene una singola cosa, non per farne bene mille; se li sai combinare ottieni il risultato;rdlkino ha scritto: tuttavia non funziona se scrivo
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"
if [ -e "$var1" ]
then
...
fi
e non capisco perchè (primo problema)
per trattare il caso del link simbolico basta che dai una leggiucchiata a man test
Codice: Seleziona tutto
var1="/dir1/dir2/dir3/[Pp][Ii][Pp][Pp][Oo]"Codice: Seleziona tutto
if [ -e $var1 ]
then
...
fiL'espansione del glob pattern produce tanti argomenti quanti sono i file che soddisfano il pattern, per esempio:accade quindi che il test vede 2 argomenti e mi viene detto che il test si aspettava un operatore binario
Codice: Seleziona tutto
$ ls
PIPPO Pippo Pluto
$ echo [Pp][Ii][Pp][Pp][Oo]
PIPPO Pippo
[ -e [Pp][Ii][Pp][Pp][Oo] ]
[: PIPPO: binary operator expected
[ -e "[Pp][Ii][Pp][Pp][Oo]" ]
#non espande i glob pattern
#vero solo se esiste il file [Pp][Ii][Pp][Pp][Oo] letteralmenteCodice: Seleziona tutto
if ls | grep -e pippo -iqx; then
...
fi
