Цикл Bash For не работает

Вы можете пока попробовать эту версию своего скрипта

#!/bin/ksh
ls *_Error.csv | while read i
do  echo "${i}"
    edfilename=$(echo "${i}" | sed -e 's/^\(s_([^_0-9]*_)*\)\([^\.]*\.csv\)$/\1/')
    echo "${edfilename}"
done

Я не думаю, что aix sed понимает + , поэтому я заменил их с * . Если вам действительно нужно + , используйте \ {1, \} , который может работать на aix.

Более простой шаблон, которого должно хватить: 's / \ ([^ 0-9] * \) _. * / \ 1 /'

1
26.04.2018, 16:30
3 ответа

Ваш файл сценария представляет собой текстовый файл DOS. Дополнительный возврат каретки в конце каждой строки сбивает с толку bash(, он видит do\r, а неdo).

Преобразуйте его в текстовый файл Unix с помощью такого инструмента, как dos2unix, или убедитесь, что ваш редактор сохраняет его как текстовый файл Unix.

10
27.01.2020, 23:12

Я только что выполнил тот же скрипт на моей машине Centos, который работает с файлом. Как предложил Кусалананда, конвертируйте файл сценария из dos в unix. установите пакет dos2unix, если он еще не установлен. Затем вы можете использовать команду ниже для преобразования $dos2unix (имя файла)

0
27.01.2020, 23:12
#!/bin/bash
for i in 1 2 3 4 5
do
    echo "Count $i"
done;

Лучше зациклить:

for i in {1..5}; do
    echo "Count $i";
done

Таким образом, вам не нужно указывать все эти номера. Итак, что бы вы сделали, если бы вам пришлось перебрать 100 чисел, используя ваш метод?

0
27.01.2020, 23:12

Теги

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