В вашем сценарии есть несколько недостатков.
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
РЕДАКТИРОВАТЬ
Если вы не уверены в том, что делаете, будьте очень осторожны с этим скриптом. Убедитесь, что вы указываете правильный каталог, и помните, что вы просто полностью изменяете каждый файл в нем.
Ваш вопрос (, если я внимательно прочитаю ), касается оператора if :Условие вряд ли даст что-то интересное :прежде всего :"y" должно быть "&y".
@Gray _M Я не совсем понял, что вам нужно, возможно, вы можете дать более подробную информацию в своем вопросе или даже опубликовать образец данных для обработки.
Чего я не понимаю, так это:
$ (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
Этот цикл будет выполнять или не выполнять некоторый сценарий на основе содержимого файла условий _, который в основном включает имена сценариев.
Опять же, предоставьте нам более подробную информацию, чтобы мы могли помочь вам больше.