URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 71873
[ Назад ]

Исходное сообщение
"Помогите разобраться с кодом (Bash)"

Отправлено THE_Beginner , 01-Фев-07 21:42 
Вот такая задачка:

#!/bin/bash

questions[1]=111
questions[2]=222
questions[3]=333
questions[4]=444


read CMD

element_count=${#questions[*]}

for ((X=0; X<=${#questions[*]}; X++)); do

if [ "`$element_count`" = "$X" -a "$CMD" != "${questions[$X]}" ]; then
echo "$CMD" >> questions.fl
fi

done

Перевожу:
Есть массив:
Просматриваем элементы массиво циклом, далше...
Если последний элемент массива questions[$X] не равен $CMD, то, ЗАПИСАТЬ значение переменной $CMD в файл questions.fl

Но программка при любом раскладе записывает значение переменной в файл questions.fi

Помогие разбраться в чем причина?
Второй день мучаюсь... ((

Огромное спасибо всем!


Содержание

Сообщения в этом обсуждении
"Помогите разобраться с кодом (Bash)"
Отправлено Oyyo , 01-Фев-07 23:06 
>Вот такая задачка:
>
>#!/bin/bash
>
>questions[1]=111
>questions[2]=222
>questions[3]=333
>questions[4]=444
>
>
>read CMD
>
>element_count=${#questions[*]}
>
>for ((X=0; X<=${#questions[*]}; X++)); do
>
>if [ "`$element_count`" = "$X" -a "$CMD" != "${questions[$X]}" ]; then
>echo "$CMD" >> questions.fl
>fi
>
>done
>
>Перевожу:
>Есть массив:
>Просматриваем элементы массиво циклом, далше...
> Если последний элемент массива questions[$X] не равен $CMD, то, ЗАПИСАТЬ значение
>переменной $CMD в файл questions.fl
>
>Но программка при любом раскладе записывает значение переменной в файл questions.fi
>
>Помогие разбраться в чем причина?
>Второй день мучаюсь... ((
>
>Огромное спасибо всем!

согласно поставленной задчи всё работает, а задачу я понял так,
проверка введённого значения ведётся только с последним
элементом массива с значением "444"

если ввести 444, то это значение в файл не падает,
всё остальное записывает


"Помогите разобраться с кодом (Bash)"
Отправлено Oyyo , 01-Фев-07 23:11 
>>if [ "`$element_count`" = "$X" -a "$CMD" != "${questions[$X]}" ]; then
P.S.
в операторе if обратные кавычки лишние,
я думаю это просто очепятка

"Помогите разобраться с кодом (Bash)"
Отправлено THE_Beginner , 01-Фев-07 23:34 
>>Вот такая задачка:
>>
>>#!/bin/bash
>>
>>questions[1]=111
>>questions[2]=222
>>questions[3]=333
>>questions[4]=444
>>
>>
>>read CMD
>>
>>element_count=${#questions[*]}
>>
>>for ((X=0; X<=${#questions[*]}; X++)); do
>>
>>if [ "`$element_count`" = "$X" -a "$CMD" != "${questions[$X]}" ]; then
>>echo "$CMD" >> questions.fl
>>fi
>>
>>done
>>
>>Перевожу:
>>Есть массив:
>>Просматриваем элементы массиво циклом, далше...
>> Если последний элемент массива questions[$X] не равен $CMD, то, ЗАПИСАТЬ значение
>>переменной $CMD в файл questions.fl
>>
>>Но программка при любом раскладе записывает значение переменной в файл questions.fi
>>
>>Помогие разбраться в чем причина?
>>Второй день мучаюсь... ((
>>
>>Огромное спасибо всем!
>
>согласно поставленной задчи всё работает, а задачу я понял так,
>проверка введённого значения ведётся только с последним
>элементом массива с значением "444"
>
>если ввести 444, то это значение в файл не падает,
>всё остальное записывает


Спасибо за ответ и проверку скрипта! Очень помогли!