Страница 1 из 1
передать переменную внутри CASE
Добавлено: 2008-08-21 2:25:07
Grenky
Код: Выделить всё
case "$1" in
rdp)
$0 vpn
echo $LALA
// тут надо использовать значение переменной "LALA"
;;
vpn)
LALA="lala"
// тут определятся значение переменной... допустим "LALA"
;;
esac
Ребята подскажите как сделать?
echo $LALA - не работает.
Дело в том, что "LALA" опрееляется не одной строкой, некрасиво повторять его и в "rdp)"
Re: передать переменную внутри CASE
Добавлено: 2008-08-21 4:28:18
zg
вынеси определение переменной до case
Re: передать переменную внутри CASE
Добавлено: 2008-08-21 5:27:59
Grenky
перефразируем: как запустить из rdp) vpn) не прибегая к конструкции $0 vpn? т.е. не вызывая дополнительного процесса vpn, т.к. в таком случае переменная между ними не передается.
Re: передать переменную внутри CASE
Добавлено: 2008-08-21 9:46:46
--null--
Код: Выделить всё
#!/bin/sh
case "$1" in
rdp)
set vpn
. $0
echo "LALA= $LALA"
;;
vpn)
LALA="lala"
;;
esac
Re: передать переменную внутри CASE
Добавлено: 2008-08-21 11:16:05
zg
Grenky писал(а):т.к. в таком случае переменная между ними не передается.
не могу понять логику, чего нужно добиться в итоге?
Re: передать переменную внутри CASE
Добавлено: 2008-08-22 4:02:40
Grenky
--null-- 
прямо в точку
to zg:
не могу понять логику, чего нужно добиться в итоге?
скрипт запускает VPN соединение. + у скрипта есть доп ключи.
Код: Выделить всё
пример:
vpn fantom rdp ХХХ
// vpn - название скрипта
// fantom имя конфигурационного файла pptp подключения (/etc/ppp/peers)
// rdp - ключ запуска одновременно и RDP подключения (не обязательный ключ)
// ХХХ - ключ определяющий номер машины к которой осуществляется RDP подключение
Код скрипта:
Код: Выделить всё
#!/bin/sh
case "$2" in
rdp)
set $1 vpn $3
. $0
echo "Try to start rdesktop to addr $MASK.$3"
rdesktop ${MASK}.$3 -u administrator -g 1280x800 -a 16 -f
$0 $1 stop
;;
stop)
echo -n "Stopping vpn: "
poff $1
echo
;;
vpn)
echo -n "Starting vpn: "
pon $1
sleep 6
lolo=`ifconfig | grep "" -c`
lolo=`expr $lolo - 6`
MASK=`ifconfig | grep "" -n | grep $lolo: | awk '{print $3}' | awk -F: '{print $2}' | awk -F. '{print $1"."$2"."$3}'`
lala=`ifconfig | grep $MASK -n -m 1 | awk '{print $1}' | awk -F: '{print $1}'`
lala=`expr $lala - 1`
blabla=`ifconfig | grep "" -n | grep ${lala}: | awk '{print $1}' | awk -F: '{print $2}'`
echo $MASK
route add -net $MASK.0 netmask 255.255.255.0 dev $blabla
;;
*)
$0 $1 vpn
;;
esac
в строке "lolo=`expr $lolo - 6`" цифра
6 определяет количество строк снизу в которой находится маска сети.
Код: Выделить всё
ppp0 Link encap:Протокол PPP (Point-to-Point Protocol)
[b]inet addr:192.168.33.209 P-t-P:192.168.33.201 Mask:255.255.255.255[/b]
ВВЕРХ POINTOPOINT RUNNING NOARP MULTICAST MTU:1396 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
коллизии:0 txqueuelen:3
RX bytes:98 (98.0 B) TX bytes:104 (104.0 B)
надеюсь обьяснил

Re: передать переменную внутри CASE
Добавлено: 2008-08-22 6:20:38
zg
Grenky писал(а):надеюсь обьяснил
man sh ... и там будет написано, что можно создавать свои функции, которым можно передавать аргументы и получать из них значения... зачем так извращаться
