Newsgroup: it.comp.os.linux.development
Titolo: Script bash

Ciao a tutti.
Sto muovendo i primi passi con la programmazione degli script di shell.
Mi sono imbattuto in un problema veramente stupido.
Voglio scrivere uno script che prenda un parametro
da riga di comando e esegua una operazione se
questo parametro è uguale ad un determinato valore
Ovvero
#!/bin/bash
stringa=pippo
if ["$1" = "stringa"];
        then echo "Hai scritto Pippo"
        else echo "Non hai scritto Pippo";
fi
se lo eseguo scrivendo ./test.sh pippo (test.sh è il file che contiene lo
script) ottengo l'errore
./test.sh: line 4: [pippo: command not found
Non hai scritto Pippo
Sembrerebbe che cerchi di eseguire un comando di nome "[nomedelparametro"
Dove cavolo sbaglio?
Sapreste aiutarmi?
Grazie.
Ciao.
Roberto

 
cosi' funziona:
#!/bin/bash
stringa=pippo
if [ $1 = $stringa ];


 Sapreste aiutarmi?
stringa=pippo
if [ $1 = $stringa ];
    then  echo "Hai scritto pippo"
   else echo "nobuono":
fi
Hai fatto errori:
Devi separare i comandi dai valori, la parentesi quadra (che e' un
comando) deve essere separata da uno spazio, infatti la shell deve
capire che dopo c'e' un parametro, e la tua sintassi lo indica invece
come prosecuzione del nome comando.
Nel test, devi indicare che stringa e' una variabile.
-- 
           |Save our planet!
    Ciao   |Save wildlife!
   roberto |For your E-MAIL use ONLY recycled Bytes  !!
           |roberto poggi   
rpo...@softhome.net

roberto wrote:

Grazie Mille!
Non avevo pensato al fatto che le parentesi rappresentassero un
comando.
In effetti è come se scrivessi
test $1 = $stringa
Giusto?
 
Grazie.
Ciao.
Roberto

 Sapreste aiutarmi?
Gli spazi sulle quadre, questo e' quello buono:
#!/bin/bash
stringa=pippo
if [ "$1" = "stringa" ];
        then echo "Hai scritto Pippo"
        else echo "Non hai scritto Pippo";
fi
E' la seconda volta che correggo questo errore, mi sbagliate
tutti qui :)
Ciao,
-- 
MoonChild
Togliere nospam per l' esatta e-mail 
UIN-ICQ: 3634753 


Lo script scrivilo così:
=------------------------------
#!/bin/bash
stringa="pippo"
if [ "$1" = "$stringa" ]; then
         echo "Hai scritto Pippo"
else
         echo "Non hai scritto Pippo"
fi
=------------------------------
Nota lo spazio dopo la ] e prima della [.
Inoltre quando devi accedere al contenuto di una variabile, questa deve 
essere preceduta dal simbolo $. Ecco perché la tua stringa diventa 
$stringa nella linea con l'if.
-- 
Formerly known as Loric

> if ["$1" = "stringa"];
if [ $1 == "stringa" ];

 fi
if [ "$1" = "$stringa" ]

Prova così:
stringa=Pippo
if [ "$1" = "$stringa" ]
then
         echo "Hai scritto Pippo"
else
         echo "Non hai scritto Pippo"
fi
1) bisogna staccare le parentesi quadre dalle variabili.
2) per usare le variabili si deve anteporre al nome il carattere $
3) indentare correttamente è fondamentale per rendere leggibile il codice.
Ciao.
Alberto

 Non hai scritto Pippo
Devi lasciare uno spazio dopo [ come pure prima di ] 
-- 
Nat

 fi
Oltre al problema dello spazio dopo il comando [, scritto così questo 
script ti restituira "Hai scritto Pippo" se gli dai come argomento 
"stringa" e non "pippo". Dovresti invece scrivere così:
#!/bin/bash
stringa=pippo
if [ "$1" = "stringa" ];then
     echo "Hai scritto $stringa"  #così è più generico
else
     echo "Non hai scritto $stringa"
fi
-- 
Se vuoi viaggiare per il mondo ed essere invitato a parlare in un sacco
di posti diversi, basta che tu scriva un sistema operativo Unix.
		-- Linus Torvalds
We're the kind of band that if we moved in next to you, your lawn would 
die, we are the first and we might just be the last. We are motorhead 
born to kick your ass!
                 -- Ian "Lemmy" Kilmister
Crescete come bravi rivoluzionari. [...]. Ricordatevi che è la 
Rivoluzione a essere imoprtante e che ciascuno di noi, preso 
isolatamente, non vale nulla. Soprattutto siate capaci di sentire ogni 
ingiustizia commessa contro chiunque in qualunque parte del mondo. E' la 
più bella qualità di un rivoluzionario.
                 -- Ernesto "Che" Guevara

Non hai scritto Pippo
#!/bin/bash
stringa=pippo
if [ "$1" = "$stringa" ];
        then echo "Hai scritto Pippo"
        else echo "Non hai scritto Pippo";
fi
Quando usi una variabile assegni il valore come hai fatto tu, ma per
usarne il valore devi indicare che è una variabile anteponendo $ al
nome della variabile.
Prova ad aggiungere queste due righe al fondo dello script:
echo stringa
echo $stringa
Buon divertimento.
Ciao
			Cristian


Si fa cosi`:
#!/bin/bash
stringa=pippo
if [ "$1" == $stringa ];
         then echo "Hai scritto Pippo"
         else echo "Non hai scritto Pippo";
fi
Nota lo spazio vicino alle parentesi quadre
e $stringa che e` il valore di stringa,
cioe` "pippo", mentre stringa vale "stringa"

Non è che servono delle ' o " nella dichiarazione di stringa?
-- 
  __  __      _ _
|  \/  |__ _| | |___
| |\/| / _` | | / _ \
|_|  |_\__,_|_|_\___/
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
|D|e|b|i|a|n| |P|o|w|e|r|e|d|
+-+-+-+-+-+-+ +-+-+-+-+-+-+-+
Linux Registered User: #388084
JabberID: 
mallo...@jabber.linux.it
Website: 
malloblenne.homelinux.net
ICQ UIN: 77382968
GPG:  CACA255D @ 
subkeys.pgp.net
Client: Gaim+gaim-encryption

 
Quando accedi ad una variabile usa $variabile
------------------------------------------------------
#!/bin/sh
stringa="pippo"
if [ "$1" = "$stringa" ]; then
	echo "Hai scritto pippo";
else
	echo "Non hai scritto pippo";
fi
------------------------------------------------------
 Ciriciao
  Gio'
-- 
/*
 * Solutions for New Business - 
http://www.snb.it
 */