PDA

View Full Version : Script bash - passare un argomento allo script


kalindriv
01-09-2006, 20:51
Ciao a tutti, quello che vi presento è un problema banale, ma googolando non ho trovato una risposta facile. :muro: Vorrei ad esempio che da shell mi venga stampato x volte "hello world", dove x è un numero passato allo script hello.sh seguente:

#!/bin/bash
i=1
while [ $i -le x ]
do
echo "hello world"
let i++
done
vorrei passare lo ad esempio così:
>sh ./hello.sh 5 e l'output sarebbe quindi:
hello world
hello world
hello world
hello world
hello world
cosa devo mettere al posto di x? io pensavo qualcosa tipo al c, come ${argv[0]} ma non funziona... voi che dite??

Esiste se no qualcosa del tipo input?

Il fatto è che devo farlo con bash, nn con c o perl...
:help:
grazie mille!!

kingv
01-09-2006, 22:52
con $1 ti riferisci al primo parametro, $2 al secondo...

Scoperchiatore
01-09-2006, 23:24
Ricordati di mettere le "" intorno ai parametri nelle istruzioni di test, altrimenti se sono vuoti si incavola.

Ad esempio:

if [ $i le $1 ]; then

andrebbe trasformata in

if [ "$i" le "$1" ]; then

questo, in linea generale vale sempre: meglio mettere le virgolette "" intorno a qualunque variabile/parametro, per fare escape di spazi, caratteri speciali e tante altre cose.

kalindriv
02-09-2006, 00:14
grazie mille!! :yeah:
In verità proprio pochi minuti fa ero arrivato alla seguente soluzione soluzione: (aggiungendo le virgolette come consigliato da Scoperchiatore)

#! /bin/bash
if [ "$#" = "0" ]
then
echo none arguments
else
a="$@"
i=1
while [ "$i" -le "$a" ]
do
echo "hello world"
let i++
done
fi

questa soluzione funziona, ma se metto 2 parametri crasha... e poi non mi sembrava molto pulita...che ne pensate?
Magari potrei aggiungere il controllo di cui sopra e fare (ma sono dettagli)
#! /bin/bash
if [ "$#" = "0" ]
then
echo none arguments
else
i=1
while [ "$i" -le "$1" ]
do
echo "hello world"
let i++
done
fi