bash_scripting

Postate qui per tutte le discussioni legate a Linux in generale.

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.
Rispondi
Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

bash_scripting

Messaggio da Sawk »

ho un problema con un case di bash.
Avevo intenzione di definire delle condizioni solo per un determinato numero di case.
Ad esempio dire che fino al caso -h mi da un output di un tipo.
Dal -e al -p un altro.
Sempre con lo stesso "case $1 in"
Ovviamente devono risultare diverse per condizioni diverse

Avatar utente
TheSnowBoarder
Linux 1.x
Linux 1.x
Messaggi: 139
Iscritto il: gio 30 giu 2005, 0:00
Località: Catania

Messaggio da TheSnowBoarder »

#! /bin/bash

echo "Inserisci qualcosa "
read input

case $input in

[a-g])
echo "Hai messo dalla a fino a g"
;;

[h-z])
echo "Hai messo dalla h fino alla z"
;;

esac

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

forse mi sono spiegato male :D
Io intendo dire dal parametro x al parametro y

case $1 in
-p)
echo "p"
;;
-a)
echo "a"
;;

# ora avevo intenzione di fare in modo che le prossime opzioni rispettivamente
# -c - f funzionino solo se io ho -a = 1

if [ -a = 1 ]; then

-c)
echo "c"
;;
-f)
echo "f"
;;
fi
esac

In questo modo però non va....

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

non credo che si possa fare una cosa del genere. devi mettere l'if dentro a ogni case.

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

mettere due case differenti come è possibile farlo ? Ho provato pure quello ma senza risultato sembrerebbe prenda dolo la prima ma non la seconda variabile di case

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

esempio?

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

case $1 in
-a)
echo "a"
;;
esac
case $2 in
-d)
echo "d"
;;
esac

questo script non andrà mai per chè legge solo la prima variabile $1 e non $2
:D

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

xké non dovrebbe andare? xò vengono eseguiti uno dopo l'altro.

Avatar utente
TheSnowBoarder
Linux 1.x
Linux 1.x
Messaggi: 139
Iscritto il: gio 30 giu 2005, 0:00
Località: Catania

Messaggio da TheSnowBoarder »

#! /bin/bash

for flag in $@
do
case $flag in

-a)
echo "-a"
;;

-b)
echo "-b"
;;

-c)
echo "-c"
;;

esac
done

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio da Sawk »

useless...provare per credere :D
Anche io credevo che mettendo due case li prendeva..invece no :)

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Messaggio da useless »

sukko@unholycathedral ~ $ pico c.sh
sukko@unholycathedral ~ $ sh c.sh -a -d
a
d
sukko@unholycathedral ~ $
è esattamente quel che dovrebbe fare!

Rispondi