@Valeriu147

Почему не работает цикл в цикле for?

Так, начну сначала, что мой скрипт делает.

Есть такой .html файл.

<tr>
    <td>click</td>
    <td>new</td>
    <td>Type_Account</td>
</tr>


в нем:

Type_Account - имя переменной;
new - содержимой переменной;
click - действие (не будет использоваться в моем скрипте)

По сути мне нужно, найти переменную и поставить туда значение, любое, какое хочу.
В скрипте ниже, я использую массивы array, array2, а не переменные. почему ? да потому, что я буду вводить несколько переменных из .html файла (Type_Account, это может быть еще, Payment_Account и т.д.) и несколько значений, которые мне будет необходимо заменить

#!/bin/bash

cd ~/dir

line1="Type_Account"
IFS=","
array=( $line1 )

line2="pro"
IFS=","
array2=( $line2 )

line3=`ls ~/dir/ | egrep '\.html'`

for ((i=0;i<"${#array[@]}";++i)); do
for y in $line3; do
# получаем </tr> тег в переменную w. если он <tr>, это переменная
w=`grep -A 1 "<td>${array[$i]}</td>" $y | grep -v "${array[$i]}"`
# получаем содержмое переменной
w2=`grep -B 1 "<td>${array[$i]}</td>" $y | grep -v "${array[$i]}"`
# получаем номер линии содержимого переменной
number=`grep -n -B 1 "<td>${array[$i]}</td>" $y | grep -v "${array[$i]}" | cut -d "-" -f 1`

if [[ "$w" == *"</tr>"* ]]; then
        echo "ok"
        echo $w2
        sed -i -e "$number s/\(<td>\).*\(<\/td>\)/<td>${array2[$i]}<\/td>/g" $y
else
        echo "not ok"
fi
done
done


Дебаг этого скрипта:
+ for y in $line3
++ grep -A 1 '<td>Type_Account</td>' 'index.html
index2.html'
++ grep -v Type_Account
grep: index.html
index2.html: No such file or directory
+ w=
++ grep -B 1 '<td>Type_Account</td>' 'index.html
index2.html'
++ grep -v Type_Account
grep: index.html
index2.html: No such file or directory
+ w2=
++ grep -n -B 1 '<td>Type_Account</td>' 'index.html
index2.html'
++ grep -v Type_Account
++ cut -d - -f 1
grep: index.html
index2.html: No such file or directory
+ number=
+ [[ '' == *\<\/\t\r\>* ]]
+ echo 'not ok'
not ok
+ (( ++i ))
+ (( i<1 ))


Если я не использую цыкл, for y in $line3; do, а просто делаю эти операции для одного файла, то это работает, а если я хочу сделать это для нескольких файлов, через цикл, то вот он не пытается пройти итерацию по каждому, а берет значение index.html index2.html Подскажите пожалуйста. Где я совершил ошибку ? Бьюсь третий день. Спасибо
  • Вопрос задан
  • 385 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
если я хочу сделать это для нескольких файлов, через цикл, то вот он не пытается пройти итерацию по каждому, а берет значение index.html index2.html Подскажите пожалуйста. Где я совершил ошибку ?

Забыл IFS восстановить в исходное значение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы