Использование оператора If in в цикле for

В вашем сценарии есть несколько недостатков.

for item in * <--do the following action on every item in this directory
do

         if [ -f $item ]  <--if the item is a file then do this
         then 
                sed  's/test/open/g' file.sh  <-- replace "test" with "open" in the file - file.sh
          <--missing closing "fi" statement here
done

Я не совсем уверен, что вы пытаетесь сделать, но если вы хотите заменить каждое вхождение test на open в файле :file.sh, вам, вероятно, следует просто сделать sed 's/test/open/g' file.shв противном случае, если вы хотите заменить его в каждый файл делает это:

#!/bin/bash
#
script=$(basename "$0")
for item in "/path/to/files/"*; do
    if [[ "$item" == "$script" ]]; then
        :
    elif [[ -f "$item" || "${item: -2}" = "sh" ]]; then 
        sed -i 's/test/open/g' "$item"
    fi
done

РЕДАКТИРОВАТЬ

Если вы не уверены в том, что делаете, будьте очень осторожны с этим скриптом. Убедитесь, что вы указываете правильный каталог, и помните, что вы просто полностью изменяете каждый файл в нем.

-2
17.10.2019, 07:22
2 ответа

Ваш вопрос (, если я внимательно прочитаю ), касается оператора if :Условие вряд ли даст что-то интересное :прежде всего :"y" должно быть "&y".

-1
28.01.2020, 05:18

@Gray _M Я не совсем понял, что вам нужно, возможно, вы можете дать более подробную информацию в своем вопросе или даже опубликовать образец данных для обработки.

Чего я не понимаю, так это:

  • список одобренных файлов с вложенными данными(файлы с вложениями? Пожалуйста, объясните)
  • запускается каждый файл в каталоге(это означает, что файлы являются скриптами? )Или вы имели в виду каждый обрабатываемый файл?
  • Я ожидаю, что только небольшая часть результатов y будет одобрена и использована в сценарии.(в каком сценарии используется? )Новый скрипт? работающий скрипт? сценарий вызова? Как генерируется сценарий вызова? Являются ли данные сценарием? Можете ли вы опубликовать и пример данных?
  • $ (awk -F',' '{ print $1 })совершенно неверно. Помимо отсутствия кавычек, он не получает никаких данных, что означает, что awk нечего обрабатывать.

    В любом случае, для начала ниже приведен простой скрипт, который может помочь:

 #!/bin/bash
scripts_folder="scripts_to_check_folder"
conditions_file="conditions_file"
for file in $(ls "$scripts_folder"); do
    if grep -F "$file" $conditions_file; then
        sh "$scripts_folder/$file"
    else
        echo "Will not execute this script: $file"
    fi
done

Этот цикл будет выполнять или не выполнять некоторый сценарий на основе содержимого файла условий _, который в основном включает имена сценариев.

Опять же, предоставьте нам более подробную информацию, чтобы мы могли помочь вам больше.

0
28.01.2020, 05:18

Теги

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