PDA

View Full Version : przypisywanie argumentów


darcnet
28-07-2007, 18:38
Witam.
Problem, na jaki natknąłem się dzisiaj i jakiego nie jestem w stanie rozwiązać w żaden sposób (gdyż moja wiedza o pisaniu skryptów powłoki jest jeszcze zbyt mała), to przypisywanie argumentów skryptowi. chodzi o to, że mogę każdy argument przypisać kolejnej zmiennej, lecz takie twarde ustawianie argumentów nie będzie działać dobrze, bo starczy, że ktoś trochę pomiesza ich kolejność i program się wykolei. poza tym chciałbym, żeby user mógł nie ustalać zmiennych, których nie chce i pozostawić je domyślnymi

pomysł, na jaki wpadłem, to coś takiego:

if [ "$1" = "-h" ]; then
echo -e "Opcje:\n -h \t\t\twyswietla to menu\n -d "nazwakatalogu" \tustala katalog docelowy (domyslnie $HOME/3gp).\n -tmpd "nazwakatalogu" \tustala katalog roboczy (domyslnie $HOME/3gp/tmp.\n"
elif [ "$1" = "-d" ]; then
$nazwa_katalogu = $2
elif [ "$1" = "-tmpd" ]; then
$katalog_roboczy = $2
fi

działać będzie, ale jest nieefektywne...

kolejny problem, to to, że zmienna nie może przypisać swojej wartości zmiennej innej zmiennej, tak, jak ja chciałem to zrobić.
wyskoczy błąd "=: command not found"

Sir_Yaro
28-07-2007, 20:05
JESLI dobrze rozumiem co chcesz zrobic to czy nie lepiej bedzie wziąść wszystkie parametry razem i rozbic je po kazdym minusie do osobnej zmiennej i dopiero takie rozbite analizowac ?

program -q fdfdf -w rrere -e fgfgf -r dfdfdfd

i rozbic na
zmienna1= -q fdfdf
zmienna2= -w rrere
zmienna3= -e fgfgf
i tak dalej....

darcnet
28-07-2007, 20:14
o co Ci chodzi rozumiem, ale za Chiny nie wiem, jak to wykonać...

mówisz, że nie wiesz, czy dobrze rozumiesz, więc spróbuję to jeszcze lepiej wyjaśnić. chodzi mi o to, żeby parametry nie musiały być wpisywane w ustalonej kolejności, a za te, które nie zostały użyte, przyjąć wartość defaultową.

Sir_Yaro
28-07-2007, 21:18
przyjrzyj sie temu:
[yaro]@d[~]$ echo "-1 232 -3 dfdfdf -5 fffff"|cut -d '-' -f 2
1 232
[yaro]@d[~]$ echo "-1 232 -3 dfdfdf -5 fffff"|cut -d '-' -f 3
3 dfdfdf
[yaro]@d[~]$ echo "-1 232 -3 dfdfdf -5 fffff"|cut -d '-' -f 4
5 fffff
[yaro]@d[~]$ echo "-1 232 -3 dfdfdf -5 fffff"|cut -d '-' -f 5

[yaro]@d[~]$
a tu jeszcze jakis przyklad znajdziesz:
http://frankmash.blogspot.com/2005/10/fun-with-find-and-cut-explode-text.html

darcnet
29-07-2007, 10:00
poszukałem i znalazłem.

while [ "$1" ]
do
if [ "$1" = "-b" ]; then
ob="$2"
case $ob in
16) basesystem="Hex";;
8) basesystem="Oct";;
2) basesystem="bin";;
*) basesystem="Unknown";;
esac
shift 2
elif [ "$1" = "-n" ]
then
num="$2"
shift 2
else
echo "Program $0 does not recognize option $1"
exit 1
fi
done



[darcnet@localhost bash]$ ./while -n 10 -b 20
10 Decimal number = 10 in Unknown number system(base=20)
[darcnet@localhost bash]$ ./while -b 10 -n 20
20 Decimal number = 20 in Unknown number system(base=10)


mimo wszystko dziękuję za pomoc. :) i za uświadomienie, że istnieje program taki, jak cut - na pewno się przyda nie raz :)

POL_ED
29-07-2007, 14:34
Z działu Download (How-To) naszego forum :

Advanced Bash-Scripting Guide (http://www.mandrivalinux.eu/downloads.php?do=file&id=108)

Zobacz (http://www.freeos.com/guides/lsst/ch04sec14.html)

z
Linux Shell Scripting Tutorial v1.05r3
A Beginner's handbook (http://www.freeos.com/guides/lsst/index.html)