Страница 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-- :bn: прямо в точку :Bravo:

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)
надеюсь обьяснил :smile:

Re: передать переменную внутри CASE

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