Страница 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
просто вызывать подряд
это первое что было сделано

но есть желание сделать циклом.
формат
не сработал
аналогично не работают
выдает
выдает
Код: Выделить всё
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. а в целом - это то что искал. еще раз спасибо