URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3194
[ Назад ]

Исходное сообщение
"рекурсия переменных в shell"

Отправлено Krueger , 21-Июл-04 21:53 
имеется скриптик вида:
01  n1=111.111.111.111/11
  .
  .
  .
02  n99=999.999.999.999/99

03  counter=1

04  cmd="nmap -p 80 "
05    while [ ${counter} -lt 99 ]
06    do
07      num="n${counter}"
08      cmd="$cmd$num"
09      counter='expr $counter+1'
10    done
11  exit 0
а вот здесь не знаю что и делать дальше :-( есть переменная содержащая имя другой переменной, как сделать так, чтобы вытащить из этой переменной внутреннюю переменную?
то есть восьмая строчка выдаёт: "cmd=nmap -p 80 n1"
а хотелось бы чтобы оно выдавало "cmd=nmap -p 80 111.111.111.111/11"
можно ли такое сделать? или есть способ проще?


Содержание

Сообщения в этом обсуждении
"рекурсия переменных в shell"
Отправлено Brainbug , 22-Июл-04 09:41 
>имеется скриптик вида:
>01  n1=111.111.111.111/11
>  .
>  .
>  .
>02  n99=999.999.999.999/99
>
>03  counter=1
>
>04  cmd="nmap -p 80 "
>05    while [ ${counter} -lt 99 ]
>06    do
>07      num="n${counter}"
>08      cmd="$cmd$num"
>09      counter='expr $counter+1'
>10    done
>11  exit 0
>а вот здесь не знаю что и делать дальше :-( есть переменная
>содержащая имя другой переменной, как сделать так, чтобы вытащить из этой
>переменной внутреннюю переменную?
>то есть восьмая строчка выдаёт: "cmd=nmap -p 80 n1"
>а хотелось бы чтобы оно выдавало "cmd=nmap -p 80 111.111.111.111/11"
>можно ли такое сделать? или есть способ проще?

A po4emu: cmd=nmap -p 80 n1 ?
cmd=nmap -p 80 $n1
cmd=nmap -p 80 ${n1}
Razli4ija man sh


"рекурсия переменных в shell"
Отправлено Krueger , 22-Июл-04 18:31 
>>08      cmd="$cmd$num"

>A po4emu: cmd=nmap -p 80 n1 ?
потому то цикл в котором перебирается список сетей
>cmd=nmap -p 80 $n1
>cmd=nmap -p 80 ${n1}
а n1 - это значение переменной num, и надо вытащить его и использовать как переменную. а как это сделать не могу выдумать :-(
>Razli4ija man sh
скобки используются, для того, чтобы переменная не сливалась со строкой... но не вижу, как мне это здесь поможет :-(



"рекурсия переменных в shell"
Отправлено Brainbug , 23-Июл-04 10:13 
>>>08      cmd="$cmd$num"
>
>>A po4emu: cmd=nmap -p 80 n1 ?
>потому то цикл в котором перебирается список сетей
>>cmd=nmap -p 80 $n1
>>cmd=nmap -p 80 ${n1}
>а n1 - это значение переменной num, и надо вытащить его и
>использовать как переменную. а как это сделать не могу выдумать :-(
>
>>Razli4ija man sh
>скобки используются, для того, чтобы переменная не сливалась со строкой... но не
>вижу, как мне это здесь поможет :-(

Izvinajus. Nemnogo ne ponal zada4u izna4alno, poetomu i posovetoval glupost. Ja bi sdelal tak:
[test@test shell]$ cat shell.sh
#!/bin/sh

cmd=`which ls`
cmd_flags="-l"
netfile="data"

while read net
do
$cmd $cmd_flags $netfile
done < $netfile

exit 0

[test@test shell]$ cat data
10.1.1.1
10.1.1.2
10.1.1.3

P.S. nmap ne na6los. Postavil prosto ls, no v dannom slu4aje ne principialno.


"рекурсия переменных в shell"
Отправлено Krueger , 24-Июл-04 11:40 
>sdelal tak:
>[test@test shell]$ cat shell.sh
>#!/bin/sh
>
>cmd=`which ls`
>cmd_flags="-l"
>netfile="data"
>
>while read net
>do
> $cmd $cmd_flags $netfile
>done < $netfile
>
>exit 0
спасибо за идею %-)
сделал вот так:
#!/bin/sh                
#set -x                  
net=$(cat data)      
nmap='nmap -p 80'        
                          
for IP in ${net} ; do
$nmap ${IP}              
done                      

"рекурсия переменных в shell"
Отправлено newser , 23-Июл-04 13:35 
>имеется скриптик вида:
>01  n1=111.111.111.111/11
>  .
>  .
>  .
>02  n99=999.999.999.999/99
>
>03  counter=1
>
>04  cmd="nmap -p 80 "
>05    while [ ${counter} -lt 99 ]
>06    do
>07      num="n${counter}"
>08      cmd="$cmd$num"
>09      counter='expr $counter+1'
>10    done
>11  exit 0
>а вот здесь не знаю что и делать дальше :-( есть переменная
>содержащая имя другой переменной, как сделать так, чтобы вытащить из этой
>переменной внутреннюю переменную?
>то есть восьмая строчка выдаёт: "cmd=nmap -p 80 n1"
>а хотелось бы чтобы оно выдавало "cmd=nmap -p 80 111.111.111.111/11"
>можно ли такое сделать? или есть способ проще?


Попробуй что-нибудь типа: ${${num}}


"рекурсия переменных в shell"
Отправлено Jake , 04-Авг-04 13:03 
n1='abcd'
varname=n1
echo ${!varname}

"рекурсия переменных в shell"
Отправлено Krueger , 06-Авг-04 22:27 
>n1='abcd'
>varname=n1
>echo ${!varname}
в какой оболочке это работает?
в /bin/sh не работает :-(


"рекурсия переменных в shell"
Отправлено Jake , 11-Авг-04 13:10 
>>n1='abcd'
>>varname=n1
>>echo ${!varname}
>в какой оболочке это работает?
>в /bin/sh не работает :-(
/bin/bash