Newsgroup: it.comp.os.linux.iniziare
Titolo: Problema con if...else...fi in bash script

Salve, sto cercando di fare un semplice script per risolvere il problema che
mi crea Mozilla (chiede di far partire un' altra sessione con un diverso
profilo utente) se voglio aprire un altro tab all' interno di una finestra,
o far partire un' istanza di Mozilla se esso non e' gia' attivo, soltanto
cliccando su un file html.
Lo script e' questo:
----------------------------------------------------------------------------
#!/bin/bash
# Faccio partire mozilla se non e' partito, altrim. apro $1 in un nuovo tab.
mozID=`ps -eaf | grep -v grep | grep 'mozilla-bin' | awk '{print $1}'`
if [ $mozID = "" ]
then
  /home/salvuz/mozilla/mozilla --splash $1
else
  /home/salvuz/mozilla/mozilla -remote "openurl($1,new-tab)"
fi
----------------------------------------------------------------------------
Cio' che non capisco e' l' errore che da' la shell sul test $mozID = "" ,
ovvero:
salvuz@deb30r1-sal:~/Desktop$ ./moz
./moz: line 7: [: =: unary operator expected
No running window found.
Cioe' il test risulta in un errore perche' (suppongo) test si aspetta un
operatore unario, la shell esegue il ramo else, e se Mozilla non e' attivo
naturalmente da' No running window found.
Come posso fare il test tra la stringa $mozID e la stringa nulla "" ?
Dove sbaglio?
Grazie.
-- 
           salvuz
     POST FATA RESVRGO
 Linux registered user #291700 | machine #174619

 Dove sbaglio?
==
-- 
Emanuele Balla  aka Skull -  Public Key #661E5CBF on 
www.keyserver.com
+----------------------------------------------------------------------+
"And 1.1.81 is officially BugFree(tm), so if you receive any bug-reports
on it, you know they are just evil lies." (By Linus Torvalds)

 
Ho cambiato 
if [ $mozID = "" ]  
in 
if [ $mozID == "" ]
Purtroppo e' uguale:
salvuz@deb30r1-sal:~$ '/home/salvuz/Desktop/moz'
/home/salvuz/Desktop/moz: line 7: [: ==: unary operator expected
No running window found.
Ho provato a non mettere neanche le virgolette, e lo script ''funziona'' 
sia con l' = che con l' == (funziona nel senso che fa quello che deve fare,
anche se ho tolto il -splash perche' altrimenti non considerava il secondo
parametro, cioe' $1 e si apriva mozilla con l'homepage di google), anche se
da' un errore diverso sul test:
 /home/salvuz/Desktop/moz2: line 7: [: too many arguments
Chissa' cos' e'...


 /home/salvuz/Desktop/moz: line 7: [: ==: unary operator expected
si, capito.. il fatto è che la shell sostituisce $mozID con il suo
contenuto prima di valutare l'espressione.
Solo che essendo vuota, quella espressione risulta:
if [ == "" ];
ergo la puoi matchare correttamente se la cambi in
if [ "x$mozID" == "x" ];
Prova e fammi sapere...
Ciao...


 Chissa' cos' e'...
Dimenticavo: l' errore lo da' quando deve eseguire il ramo else, quindi
suppongo quando test ritorna 1 , cioe' falso (anche se credo ritorni
semplicemente qualcosa diverso da zero, cioe' un errore)...


 
 Purtroppo no:
Ancora too many arguments...
Non sono neanche riuscito a capire perche' 
/home/salvuz/mozilla/mozilla -splash $1
non apre mozilla con lo splashscreen caricando $1, ma $1 viene ignorato,
apre mozilla con lo splashscreen, si', ma sulla homepage!


 Ancora too many arguments...
Scusami, avevo dimenticato le virgolette intorno a x$mozID...
Resta pero' il problema dello splashscreen... anche se' e' solo uno
sfizio... 
Grazie per i suggerimenti, eh!


salvuz ha scritto:

Riduci la variabile mozID a solo due caratteri con cut -b 2, così se il 
risultato è "No running window found" la variabile sarà solo "No" e non 
dovrebbero esserci problemi con il test.
Ciao, Paolo

 
Ho fatto cosi':
if [ "" == "$mozID" ];
e va anche bene.
