Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash / 5 сообщений из 5, страница 1 из 1
15.04.2015, 15:53
    #38937350
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash
Нужно в Linux запустить несколько команд заданных в переменных.
Вот так скрипт выполняется:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
#!/bin/sh

c1="uname -a"
c2="uptime"

$c1
$c2



В цикле не получается:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#!/bin/sh

c1="uname -a"
c2="uptime"

i=1
while [ $i -lt 3]; do
    $c$[i] #это не работает!!!
    i=$[$i+1]
done


Как нужно правильно указать вывод переменной?
...
Рейтинг: 0 / 0
15.04.2015, 16:40
    #38937450
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash
Хм...
Получилось как-то так, но думаю что это не оптимально.
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
#!/bin/sh

c1="uname -a"
c2="uptime"

i=1
while [ $i -lt 3 ]; do
    j=c`echo$i`
    eval $`echo $j`
    i=$[$i+1]
done
...
Рейтинг: 0 / 0
15.04.2015, 17:20
    #38937506
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash
Теперь еще понадобилось вывести саму команду
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#!/bin/sh

c1="uname -a"
c2="uptime"

i=1
while [ $i -lt 3 ]; do
    j=c`echo $i` #была опечатка
    echo $`echo $j` #выводит "$c1", а надо "uname -a"
    eval $`echo $j`
    i=$[$i+1]
done
...
Рейтинг: 0 / 0
15.04.2015, 20:59
    #38937723
k-nike
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash
Есть результат!
Долго же пришлось помучиться над решением казалось бы такой простой задачи.

Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#!/bin/sh

c1="uname -a"
c2="uptime"

i=1

while [ $i -lt 3 ]; do
   eval echo =====RUN: $`echo c$i`
   eval $`echo c$i`
   echo ""
   i=$[$i+1]
done
...
Рейтинг: 0 / 0
15.04.2015, 22:53
    #38937814
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash
k-nike,
sh версии >= 2.0
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#!/bin/sh

declare \
    c1="uname -a" \
    c2="uptime" \
    _i=0 \
    z;

while (( ++_i <= 2 ));
do 
    z=c$_i;
    printf '********************************\ncommand: %s\n%s\n\n' \
            "${!z}" \
            "$( eval ${!z} )";
done;

unset -v c1 c2 _i z;


вариант: использовать для команд одну переменную - массив
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#!/bin/sh

declare -a _commands;
declare -i _i;
declare    _z;

_commands[1]="uname -a";
_commands[2]="uptime";

for (( _i=1; _i <= 2; _i++ ));
do 
    _z=${_commands[$_i]};
    printf '********************************\ncommand: %s\n%s\n\n' \
            "$_z" \
            "$( eval $_z )"
done;

unset -v _commands _i _z;


Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#!/bin/sh

declare -a _commands;
declare    _z;

_commands[8]="which cal >/dev/null 2>&1 && cal -3m";
_commands[3]="uptime";

for _z in "${_commands[@]}";
do 
    printf '********************************\ncommand: %s\n%s\n\n' \
            "$_z" \
            "$( eval $_z )"
done;

unset -v _commands _z;


...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]