Сбой проверки расширения файла Unix - PullRequest
0 голосов
/ 09 марта 2019

Что-то мне не хватает, что я не могу понять .. Нужны некоторые мысли ..

Я пытаюсь проверить расширения файлов в каталоге, только расширения файлов, которые я получаю .txt или .TXT).... но оба должны рассматриваться как разные, так как я выполняю разные проверки для файлов .txt и .TXT ..

У меня есть следующие файлы

aa.394.63.txt
aa.394.23.TXT

Вот мой код

for file in "$SEARCH_DIR"/*; do
  extn=$(echo $file | awk -F '.' '{print $NF}')
  echo "extn:" $extn
  if [ $extn=="txt" ]; then
     echo "txt Loop"
  elif [$extn=="TXT" ]; then
     echo "TXT loop"
  fi

Но этот сценарий всегда будет верным для проверок "txt", никогда не переходит в "цикл TXT". Я думаю, что Unix чувствителен к регистру, и его следует рассматривать как отдельный. Пожалуйста, сообщите, что я пропустил..

1 Ответ

2 голосов
/ 09 марта 2019

Вы используете test в форме [] для проверки ваших условий. Вы должны включить пробелы в скобках и операторы равенства.

со страницы руководства test:

[является синонимом для теста, но требует последнего аргумента] ...

Пробелы в скобках важны - каждый оператор и операнд должны быть отдельным аргументом. https://ss64.com/bash/test.html

Это означает, что вам нужно уделять особое внимание пробелам в ваших тестовых конструкциях. Вы также должны отметить, что переменные должны быть заключены в кавычки, когда вы тестируете их с помощью [], так как они могут подвергаться разделению слов (в данном случае это не актуально, но, вероятно, это хорошая привычка).

Поскольку вы используете [] для проверки условий, а не конструкцию bash [[]], вы должны использовать один =, обрамленный пробелами, в качестве теста на равенство строк.

Ниже приведена слегка измененная версия вашего кода, и она должна работать:

#!/bin/bash

SEARCH_DIR=./search
for file in "$SEARCH_DIR"/*; do
    extn=$(echo $file | awk -F '.' '{print $NF}')
    echo "extn:" "$extn"
    if [ "$extn" = "txt" ]; then
        echo "txt Loop"
    elif [ "$extn" =  "TXT" ]; then
        echo "TXT loop"
    fi
done

Ссылки

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