Как мне найти файл по его базовому имени и получить его тип файла в сценарии bash? - PullRequest
1 голос
/ 27 марта 2020

Я пишу свой первый bash сценарий как часть домашнего задания, и мне дано 19 слов, что мы не смогли go над некоторыми из этих вещей в классе (и я не очень хорошо гуглю).

Я пишу скрипт, который принимает пользовательский ввод и ищет компакт-диск, чтобы найти файл с именем $ userInput. Если скрипт найден, он определит, является ли файл «обычным файлом» (например, .txt) или файл является каталогом. Как я могу собрать эту информацию?

Вот мой код в настоящее время:

#! /bin/bash

$userInput 
echo "Enter a file name. Empty to exit."
while [ 1 ]
do
    echo "Please input a file name:"
    read userInput
    if [ "$userInput" == "" ]; then
        exit
    else
        echo $userInput
    fi
done

У меня есть цикл и получение пользовательского ввода вниз, что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Существует несколько способов классификации записи. Например,

[[ -f $filename ]]

тесты для обычных файлов,

[[ -d $filename ]]

тесты для каталогов, а также существуют другие тесты, где вы можете проверить символические ссылки или читать или писать / выполнить разрешения. Вы можете найти список доступных операторов проверки файлов здесь .

0 голосов
/ 27 марта 2020
if cd $userInput*; then
   cd ..
   echo "It is a directory."
else
   # the cd will do the rest of informing for you
fi

Я также настоятельно рекомендую превратить это в файл и получить пользовательский ввод в командной строке, например:

bash ./yourcode.sh filename

Внутри вашего кода:

if cd $1*; then
    cd ..
    echo "It is a directory."
else
    # the cd will do the rest of informing for you
fi

РЕДАКТИРОВАНИЕ: ДОПОЛНИТЕЛЬНО

Продолжайте здесь, если вы действительно хотите понять, что произошло. В bash каждая команда / функция по умолчанию возвращает значение, которое сообщает ядру, было ли оно успешно завершено или что-то пошло не так, для простоты мы будем просто предполагать, что оно возвращает true в случае успеха и false, если нет, здесь я использовал эту информацию с функцией cd, которая изменяет текущий каталог на указанный, если изменение произошло успешно, он вернет true, который затем я запишу в своем операторе if для выполнения кода , который состоит из возврата в исходный каталог (cd ..) и сообщения пользователю, что это каталог. В противном случае cd вернет false и сам скажет вам, что произошло, был ли это файл или он вообще не существует, а * (подстановочный знак) существует, чтобы найти любое расширение, которое он может иметь или даже не иметь. Я надеюсь, что это помогает, ура!

...