Как использовать case для определения конкретного шаблона в скрипте BASH - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь определить несколько папок в моем скрипте, которые запускаются с 101-121. Сценарий написан для просмотра одной определенной папки за раз.

Я получаю ошибку:

command not found
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

Часть моего кода, которая не работает.

for i in 1;                 
do
  case $i in    
    1)

    projectfolder= `ls -l| grep "1*"` ;; #trying to identify individual folders 101-121

  esac
done

не очень хорошо локализует папки.

Ответы [ 2 ]

2 голосов
/ 20 мая 2019
projectfolder= `ls -l| grep "1*"`

это ужасная вещь.Во-первых, вы, вероятно, намеревались написать projectfolder=$(ls -l| grep "1*") (используя $() для удобства чтения, но важной деталью является недостаток места после =), но делать это тоже плохая идея.Почему бы просто не сделать for i in 1*; do ...?

1 голос
/ 20 мая 2019

Если все папки вашего проекта соответствуют описанному вами шаблону именования, вы должны использовать расширение скобки , чтобы развернуться до чисел 101..121, а затем легко перебрать их:

for projectfolder in {101..121} ; do
  [ -d "$projectfolder" ] && echo "'${projectfolder}' exists and is a directory." 
done

Расширение Brace не проверяет существование каких-либо каталогов, поэтому, чтобы увидеть, какие из них действительно есть, вы должны проверить каждый из них, используя [ -d.

Найдите Brace Expansion на странице справки bash(1) и введите help test для получения дополнительной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...