Страница 1 из 1

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

Добавлено: 2011-01-21 11:20:29
dmtr

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

#!/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
как правильно вызвать команды или по другому задать их?

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

Добавлено: 2011-01-21 14:35:27
FreeBSP
в косые ковычки (апострофы)
или exec
или оформить как функции
или вместо цикла просто вызывать подряд
top; dmesg =a; df -h; last.....

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

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

for i in `jot - 1 5`
do
  exec $command$i
done

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

Добавлено: 2011-01-21 16:07:06
dmtr
просто вызывать подряд
это первое что было сделано :)
но есть желание сделать циклом.

формат

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

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 ...
в программировании не силен, но можт это как-то это связано с указателями на переменные?? шелл их использует??

наверное надо конфиг файл сделать - в нем построчно команды, и его построчно читать

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

Добавлено: 2011-01-22 11:06:41
Alex Keda
а где у вас command1 находится?

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

Добавлено: 2011-01-22 15:20:24
FreeBSP
Лех, товарищь массивы захотел
а я ошибся и вместо 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
правда, результат работы мне честно говоря не понравился

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

Добавлено: 2011-01-24 11:30:59
dmtr
спасибо огромное, то что надо.
конечный скрипт выглядит так:

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

#!/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. а в целом - это то что искал. еще раз спасибо