переменные в цикле

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

переменные в цикле

Непрочитанное сообщение dmtr » 2011-01-21 11:20:29

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

#!/bin/sh

command1="top";
command2="dmesg -a";
command3="df -h";
command4="last -1000 |grep tty";
command5="last -f /var/log/wtmp.0 -1000 |grep tty";

i=5;    #количество команд (для цикла)
n=1;    #счетчик


    while [ $n -le $i ]
    do
        run=command$n;
        $run;
        n=`expr $n + 1`;
    done
на выходе

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

command1: not found
command2: not found
command3: not found
command4: not found
command5: not found
как правильно вызвать команды или по другому задать их?
This game has no name. It will never be the same.

Хостинговая компания 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/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: переменные в цикле

Непрочитанное сообщение FreeBSP » 2011-01-21 14:35:27

в косые ковычки (апострофы)
или exec
или оформить как функции
или вместо цикла просто вызывать подряд
top; dmesg =a; df -h; last.....

цикл кстати лучше делать так

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

for i in `jot - 1 5`
do
  exec $command$i
done
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: переменные в цикле

Непрочитанное сообщение dmtr » 2011-01-21 16:07:06

просто вызывать подряд
это первое что было сделано :)
но есть желание сделать циклом.

формат

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

exec $command$i
не сработал

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

exec: 1: not found
аналогично не работают

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

exec command$i
выдает

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

exec: command1: not found

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

exec `command$i`;
выдает

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

command1: not found
command2: not found
command3: not found
command4: not found
command5: not found
не воспринимает шелл command$i как command1, command2 ...
в программировании не силен, но можт это как-то это связано с указателями на переменные?? шелл их использует??

наверное надо конфиг файл сделать - в нем построчно команды, и его построчно читать
This game has no name. It will never be the same.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: переменные в цикле

Непрочитанное сообщение Alex Keda » 2011-01-22 11:06:41

а где у вас command1 находится?
Убей их всех! Бог потом рассортирует...

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: переменные в цикле

Непрочитанное сообщение FreeBSP » 2011-01-22 15:20:24

Лех, товарищь массивы захотел
а я ошибся и вместо eval насоветовал exec

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

[15:01]~/> cat -n /etc/rc.d/jail | head -48 | tail -1
    48                  eval _exec_afterstart${i}=\"\${jail_${_j}_exec_afterstart${i}:-\${jail_exec_afterstart${i}}}\"
так на чистом шелле реализуется некая поддержка чего то вроде массивов

тоесть тебе надо

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

[15:19]~/> cat test.sh
#!/bin/sh

command1="top";
command2="dmesg -a";
command3="df -h";
command4="last -1000 |grep tty";
command5="last -f /var/log/wtmp.0 -1000 |grep tty";


for i in `jot - 1 5`
do
        eval cmd=\"\${command$i}\"
        $cmd
done
правда, результат работы мне честно говоря не понравился
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
dmtr
ст. прапорщик
Сообщения: 545
Зарегистрирован: 2009-11-06 22:01:34
Откуда: с Ростова

Re: переменные в цикле

Непрочитанное сообщение dmtr » 2011-01-24 11:30:59

спасибо огромное, то что надо.
конечный скрипт выглядит так:

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

#!/bin/sh

command1="top";
command2="dmesg -a";
command3="df -h";
command4="last -1000 | grep tty";
command5="last -f /var/log/wtmp.0 -1000 |grep tty";


for n in `jot - 1 5`
    do
        eval cmd=\"\${command$n}\"
        echo -e "\033[1;32mPress Enter to run \"$cmd\"\033[0m"
        read var;
        $cmd
    done
как-то непонятно только отрабатывают 4 и 5 команды - выдают только последнюю строку wtmp. а в целом - это то что искал. еще раз спасибо
This game has no name. It will never be the same.