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

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Grenky
проходил мимо
Сообщения: 4
Зарегистрирован: 2008-08-21 2:20:36

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

Непрочитанное сообщение Grenky » 2008-08-21 2:25:07

Код: Выделить всё

     
 case "$1" in
      rdp)
      $0 vpn
      echo $LALA
     // тут надо использовать значение переменной "LALA"
      ;;
      vpn)
      LALA="lala" 
      // тут определятся значение переменной... допустим "LALA"
      ;;
      esac
Ребята подскажите как сделать?
echo $LALA - не работает.
Дело в том, что "LALA" опрееляется не одной строкой, некрасиво повторять его и в "rdp)"

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-08-21 4:28:18

вынеси определение переменной до case

Аватара пользователя
Grenky
проходил мимо
Сообщения: 4
Зарегистрирован: 2008-08-21 2:20:36

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

Непрочитанное сообщение Grenky » 2008-08-21 5:27:59

перефразируем: как запустить из rdp) vpn) не прибегая к конструкции $0 vpn? т.е. не вызывая дополнительного процесса vpn, т.к. в таком случае переменная между ними не передается.

--null--
проходил мимо

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

Непрочитанное сообщение --null-- » 2008-08-21 9:46:46

Код: Выделить всё

#!/bin/sh


case "$1" in
      rdp)
      set vpn
      . $0
      echo "LALA= $LALA"
      ;;
      vpn)
      LALA="lala"
      ;;
      esac

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-08-21 11:16:05

Grenky писал(а):т.к. в таком случае переменная между ними не передается.
не могу понять логику, чего нужно добиться в итоге?

Аватара пользователя
Grenky
проходил мимо
Сообщения: 4
Зарегистрирован: 2008-08-21 2:20:36

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

Непрочитанное сообщение Grenky » 2008-08-22 4:02:40

--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:

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

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

Непрочитанное сообщение zg » 2008-08-22 6:20:38

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