Как проверить, существует ли файл и является ли он текстовым файлом? - PullRequest
1 голос
/ 29 мая 2019

Привет всем, мне нужно проверить, существует ли файл с помощью сценария оболочки. Я немного покопался и получил этот синтаксис, но я не уверен, почему он не работает (имейте ввиду, что вы разговариваете с новичком)

Я обнаружил, что вы можете добавить -e, например, чтобы проверить, существует ли он, но я не понял, откуда появились эти ярлыки или их имена

#! /bin/bash
if [ "$#" = "1" ] 
then
    if [ -e $($1) ] && [ -f $($1) ] 
        then echo 'the file exists'
    fi

fi

Ответы [ 3 ]

2 голосов
/ 29 мая 2019

В идиоматическом Bash:

#!/usr/bin/env bash

if [[ -f "${1-}" ]]
then
    echo 'the file exists'
fi

Имейте в виду, что это не говорит о том, является ли файл текст файл.Единственное «определение» текстового файла, в отличие от любого другого файла, состоит в том, содержит ли он только печатаемые символы, и даже это не соответствует работе с символами спецификации UTF и наборами символов, не относящимися к ASCII.Для этого вы можете захотеть взглянуть на неавторизованный вывод file "${1-}", например:

$ file ~/.bashrc
/home/username/.bashrc: ASCII text

Подробнее в Bash Guide .

1 голос
/ 29 мая 2019
#! /bin/sh

FILE=$1    # get filename from commandline

if [ -f $FILE ]; then
    echo "file $FILE exists"
fi

См. Тонкую справочную страницу команд тестирования, встроенных в различные оболочки: man test;человек ш;man bash

Вы также найдете множество оболочек, которые очень хорошо это объясняют.Или см. Справочное руководство bash: https://www.gnu.org/software/bash/manual/bash.pdf

1 голос
/ 29 мая 2019
#!/bin/bash
if [ "$#" == 1 ]; then
    if [[ -e "$1" && -f "$1" ]]; then
        echo 'The file exists';
    fi
fi

Вы должны помещать все условные символы && между [[]] символами, иначе это будет интерпретироваться как выполнение в случае успеха.

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