Программирование на 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.
dmtr
-
Хостинг HostFood.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
- Откуда: Москва
Непрочитанное сообщение
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 системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
FreeBSP
-
dmtr
- ст. прапорщик
- Сообщения: 545
- Зарегистрирован: 2009-11-06 22:01:34
- Откуда: с Ростова
Непрочитанное сообщение
dmtr » 2011-01-21 16:07:06
просто вызывать подряд
это первое что было сделано

но есть желание сделать циклом.
формат
не сработал
аналогично не работают
выдает
выдает
Код: Выделить всё
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.
dmtr
-
Alex Keda
- стреляли...
- Сообщения: 35480
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2011-01-22 11:06:41
а где у вас command1 находится?
Убей их всех! Бог потом рассортирует...
Alex Keda
-
FreeBSP
- майор
- Сообщения: 2020
- Зарегистрирован: 2009-05-24 20:20:19
- Откуда: Москва
Непрочитанное сообщение
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 системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!
FreeBSP
-
dmtr
- ст. прапорщик
- Сообщения: 545
- Зарегистрирован: 2009-11-06 22:01:34
- Откуда: с Ростова
Непрочитанное сообщение
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.
dmtr