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

Я был в состоянии настроить это:

#!/bin/bash

file=$1

command1 $file
command2 $file

это прекрасно работает, когда я запускаю myscript myfile1.ext он правильно выполняет command1 myfile1.ext и command2 myfile1.ext .

Проблема в том, что я хотел бы передать больше имен файлов в одном экземпляре, чтобы ускорить процесс, и смог бы сделать это: myscript myfile1.ext myfile2.ext myfile3.ext myfile4.ext и каждый из этих файлов должен быть обрабатывается скриптом. Прямо сейчас, даже если я передам больше имен файлов, обрабатывается только первое.

Как мне изменить этот скрипт для последовательной работы с несколькими файлами?

1 ответ1

2

Прямой подход такой:

#!/bin/sh

for file in "$@"; do
   command1 "$file"
   command2 "$file"
done

Заметки:

  • Код не является специфичным для Bash, он работает в sh (отсюда и мой шебанг).
  • Кавычки переменные, как я сделал.

Вы можете реализовать более сложную логику с помощью встроенной оболочки shift . Смотрите документацию или help shift в Bash.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .