Как узнать, существует ли обычный файл в Bash?


2,283

Я использовал следующий сценарий, чтобы увидеть, если файл существует:

#!/bin/bash 

FILE=$1  
if [ -f $FILE ]; then 
    echo "File $FILE exists." 
else 
    echo "File $FILE does not exist." 
fi 

Что такое правильный синтаксис для использования, если я только хочу, чтобы проверить, если файл делает не существует?

#!/bin/bash 

FILE=$1  
if [ $FILE does not exist ]; then 
    echo "File $FILE does not exist." 
fi 
+4

Будучи очень ленивым человеком, что я, я, как правило, использовал следующую глупую обходную конструкцию: 'if [-f $ FILE]; тогда; еще; echo "File $ FILE не существует."; «Наверное, хорошо, что я нашел этот вопрос и научился делать это более правильно. :) 15 янв. 132013-01-15 13:35:49

+108

Я нашел этот [список условных утверждений bash] (http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html) очень полезен. 12 мар. 092009-03-12 14:52:16

+4

Чтобы быть зависящим, вы должны сказать «обычный файл», так как большинство документов UNIX/POSIX относятся в общем случае ко всем типам записей в файловой системе просто «файлы», например, символическая ссылка - это тип файла, который называется именем pipe, regular file, directory, block special, character special, socket и т. д. 09 ноя. 132013-11-09 08:51:09

+6

@kevinarpe, если вы хотите проверить, существует ли _something_, используйте '-e'. -f не будет выбирать каталоги, символические ссылки и т. д. 24 мар. 152015-03-24 09:38:14

+7

Чтобы быть в безопасности, всегда используйте двойные кавычки, чтобы правильно обрабатывать имена файлов с помощью пробелов, например 'FILE = $ 1' ->' FILE = "$ 1" и 'if [ -f $ FILE]; '->' if [-f "$ FILE"]; ' 24 мар. 152015-03-24 11:37:37

  0

К сожалению, это склонно к условиям гонки и не полезно в большинстве случаев использования, за исключением простых примеров приветствия. 19 июн. 152015-06-19 15:38:52

+1

В качестве дополнительной заметки и в отношении переменной «$ FILE»: По соглашению переменные среды (PATH, EDITOR, SHELL, ...) и внутренние переменные оболочки (BASH_VERSION, RANDOM, ...) полностью капитализируются. Все остальные имена переменных должны быть строчными. Поскольку имена переменных чувствительны к регистру, это соглашение позволяет избежать случайного переопределения экологических и внутренних переменных. 16 янв. 162016-01-16 14:09:50

3,226

test команда ([ здесь) имеет «не» логический оператор, восклицательный знак (по аналогии со многими другими языками). Попробуйте это:

if [ ! -f /tmp/foo.txt ]; then 
    echo "File not found!" 
fi 
+25

Я немного искал, чтобы найти правильный синтаксис для «если какой-либо из двух файлов не существует».Следующие обе работают: 'if [! \ (-f "f1" -a -f "f2" \)]; затем echo MISSING; fi' 'если [! -f "f1"] || [! -f "f2"]; затем echo MISSING; fi' 02 фев. 122012-02-02 15:41:47

+109

@DavidWinterbottom Еще более сочный: '[-f /tmp/foo.txt] || echo «Файл не найден!» ' 26 июн. 132013-06-26 21:08:43

+9

Параметр может быть любым из следующих: ' -e: Возвращает истинное значение, если файл существует '-f: Возвращает истинное значение, если файл существует и обычный файл' ' - r: Возвращает истинное значение, если файл существует и доступен для чтения ' ' -w: Возвращает истинное значение, если файл существует и доступен для записи ' ' -x: Возвращает истинное значение, если файл существует и является исполняемым' '-d: Возвращает истинное значение, если существует и является каталогом 19 дек. 132013-12-19 13:41:15

+1

Если вы хотите использовать 2 условия в if-операции, используйте оператор -a, это означает AND. Я думаю, что это также возможно с &, если вы используете оператор [[]] 25 янв. 142014-01-25 20:44:13

+2

Существует асимметрия при использовании '! -f' с '&&' против использования '-f' с' || '. Это связано с кодом выхода, возвращаемым проверкой отсутствия/существования. Если вам нужна ваша линия, чтобы всегда выйти с чистотой с кодом выхода 0 (и иногда вам не нужно это ограничение), оба подхода не являются взаимозаменяемыми. В качестве альтернативы просто используйте оператор 'if', и вам больше не нужно беспокоиться о коде выхода вашей проверки отсутствия/существования. 01 авг. 152015-08-01 02:16:08

  0

Если имя файла динамическое, проверьте его с помощью 'if [! -f "$ filename"]; то ... 'потому что он может содержать пробелы 27 авг. 152015-08-27 14:25:52

  0

Используется для запуска задания cron только в том случае, если скрипт существует, поскольку наши задачи cron развертываются перед нашей базой кода приложения ' * * * * * [-f foo.php] && php foo.php' 23 окт. 152015-10-23 20:41:47

  0

[[это ключевое слово bash, похожее на (но более мощное, чем) команда [. См. <Http://mywiki.wooledge.org/BashFAQ/031> и <http://mywiki.wooledge.org/BashGuide/TestsAndConditionals>. Если вы не пишете POSIX sh, рекомендуется использовать [[. 16 янв. 162016-01-16 14:08:52

+1

Храните 'пробел' между' ['и'! ', Он не будет работать иначе 02 июн. 162016-06-02 14:25:46

  0

Я предлагаю' [[! -f ...]]; затем'. Почему вы не используете двойные скобки? - Я не могу заставить ваше предложение работать. 29 окт. 162016-10-29 10:47:12


243

вы можете инвертировать выражение с:

#!/bin/bash 
FILE=$1 

if [ ! -f "$FILE" ] 
then 
    echo "File $FILE does not exist" 
fi 

Соответствующий человек страница man test или, что то же самое, man [ - или help test или help [ для встроенного Баш «!» команда.

+4

В [tag: bash], '[' является встроенным. Таким образом, соответствующая информация скорее получается с помощью 'help [' ... но это показывает, что '[' является синонимом для 'test' builtin, поэтому соответствующая информация скорее получена с помощью' help test'. См. Также раздел [Условное выражение Bash в руководстве] (http://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions). 29 июн. 132013-06-29 10:05:54

  0

@gniourf_gniourf: Да, но встроенная команда '' '' '' ведет себя очень похоже на внешнюю '[' команду, поэтому либо 'man test', либо' man ['даст вам хорошее представление о том, как это работает. 21 сен. 132013-09-21 19:04:48

+6

@KeithThompson за исключением того, что _bash_ builtin '[' имеет больше переключателей, чем внешняя команда '[', найденная в моей системе ... Вообще говоря, я считаю, что лучше читать документацию, специфичную для данного инструмента, а не документацию, специфичную для другой смутно связанный. Возможно, я ошибаюсь, хотя ';)' 21 сен. 132013-09-21 21:54:56


103
[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE" 

Кроме того, вполне возможно, что файл является символической ссылкой сломанной или нерегулярной файл, как, например, сокет, устройство или fifo. Например, чтобы добавить проверку битых ссылок:

if [[ ! -f $FILE ]]; then 
    if [[ -L $FILE ]]; then 
     printf '%s is a broken symlink!\n' "$FILE" 
    else 
     printf '%s does not exist!\n' "$FILE" 
    fi 
fi 
+5

Могу ли я спросить, почему два «[? S в тесте? (например, [[! -a $ FILE]]). Я попробовал все варианты, упомянутые в коробке солярия, и только тот работал, так благодарен, но почему? 20 апр. 112011-04-20 08:35:36

+25

Двойные скобки - это «современное» расширение; например, они не будут разбивать слово (например, имена файлов с пробелами) и все еще работают для пустых строк: http://mywiki.wooledge.org/BashFAQ/031 14 фев. 122012-02-14 23:40:13

+6

согласно http://tldp.org/LDP/abs /html/fto.html -a тождественно по -e. Он «устарел», и его использование не рекомендуется. В любом случае +1 для упоминания о проверке сломанной символической ссылки 01 сен. 122012-09-01 20:55:27

+4

@dimitrismistriotis two "[" является не переносным расширением, реализованным (по-разному) zsh & bash;, как правило, вам следует избегать его, если это вообще возможно. 26 окт. 122012-10-26 15:41:08

+1

См. [SO 321348] (http://stackoverflow.com/questions/321348/bash-if-a-vs-e-option) по уважительной причине, почему '-a' нельзя отменить в условных выражениях с одной скобкой , Избегайте «-а» вообще, я предлагаю. 17 янв. 142014-01-17 16:04:33

+2

Я проголосовал за это ПОТОМУ ЧТО оно использовало [[. Это широко распространенное расширение. Если вы знаете, что используете bash, тогда нет причин не использовать его. Это гораздо меньше подверженности ошибкам, чем [. 10 июл. 142014-07-10 16:02:32

  0

Изменил это немного, чтобы устранить '-a', но также потому, что' -a' эквивалентен '-e', который возвращает true для существующего файла независимо от типа, вы столкнулись бы с проблемой, если добавление проверок для fifos или сокетов во втором примере. 14 сен. 142014-09-14 01:58:28


76

Стоит отметить, что, если вам нужно выполнить одну команду, которую вы можете сокращайте

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

в

test -f "$file" || echo "$file" 

или

[ -f "$file" ] || echo "$file" 
  0

Спасибо!Нужна альтернатива, которая не использует [[]] 25 мар. 172017-03-25 10:43:06


52

Я предпочитаю, чтобы сделать следующий Однострочник, в POSIX оболочки совместимый формат:

$ [ -f "/$DIR/$FILE" ] || echo "$FILE NOT FOUND" 

$ [ -f "/$DIR/$FILE" ] && echo "$FILE FOUND" 

За пару команд, как я хотел бы сделать в скрипте:

$ [ -f "/$DIR/$FILE" ] || { echo "$FILE NOT FOUND" ; exit 1 ;} 

После того, как я начал делать это, Я редко использую полностью типизированный синтаксис!

+1

Прежде всего, некорректные ссылки на переменные подвержены ошибкам. Тем не менее, где говорится в * любой * bash manpage, что встроенный '' '' '' '' или 'test' будет проверять наличие * файла * аргумента по умолчанию (в отличие от' -e')? Разве это не было бы двусмысленным? AFAIK (и AIUI раздел «УСЛОВНЫЕ ЭКСПРЕССИИ») единственное, что проверено с вашим подходом, это то, что аргумент не пуст (или неопределен), который в данном случае является тавтологией (пусть '$ DIR = ''' и '$ FILE = ''', то аргумент все еще '' // ''). 09 ноя. 122012-11-09 02:59:48

+1

Доказательство: 'ls/foo', result' ls: невозможно получить доступ/foo: нет такого файла или каталога'. '[/ foo] && echo 42', result' 42'. GNU bash, версия 4.2.37 (1) -release (i486-pc-linux-gnu). 09 ноя. 122012-11-09 03:05:42

  0

@PointedEars: Мне не удалось указать опцию '-f', на данный момент я написал этот ответ. Очевидно, вы всегда можете использовать '-e', если вы не уверены, что это будет обычный файл. Кроме того, во всех моих сценариях я цитирую эти конструкции, я должен был просто представить это без надлежащей проверки. 17 ноя. 122012-11-17 23:42:11

  0

ACK. Но вы, вероятно, знаете, что однострочный не может решить проблему if-else: '[$ condition] && if_true || if_false' подвержен ошибкам. В любом случае, я нахожу '[! -f "$ file"] && if_not_exists 'легче читать и понимать, чем' [-f "$ file"] || if_not_exists'. 18 ноя. 122012-11-18 01:33:22


27

Вы должны быть осторожными о запуске test для некотируемого переменной, так как это может привести к неожиданным результатам:

$ [ -f ] 
$ echo $? 
0 
$ [ -f "" ] 
$ echo $? 
1 

рекомендация, как правило, имеют проверенную переменную, окруженную двойные кавычки:

#!/bin/sh 
FILE=$1 

if [ ! -f "$FILE" ] 
then 
    echo "File $FILE does not exist." 
fi 
+8

Рекомендация состоит в том, чтобы иметь ** каждую ** переменную, окруженную двойными кавычками, если вы точно не знаете, что у вас есть один из редких случаев, когда это не нужно, или один из даже более редких случаев, когда это вредно. (И нет, это не один из них.) 28 май. 132013-05-28 11:43:32

  0

Не могли бы вы объяснить, почему это не так, чтобы использовать двойную кавычку? В противном случае я не вижу полезности в комментарии. 28 май. 132013-05-28 23:29:21

+4

Я имел в виду: это не один из редких случаев, когда это не нужно или вредно. Программист оболочки должен привыкнуть (почти) к каждой переменной в двойных кавычках; это правило не ограничено '[...]'. 29 май. 132013-05-29 09:03:59

  0

7

test вещь может считаться. Он работал для меня (на основе Bash Shell: Check File Exists or Not):

test -e FILENAME && echo "File exists" || echo "File doesn't exist" 

7

Чтобы изменить тест, использовать "!". Это эквивалентно логическому оператору «нет» на других языках.Попробуйте это:

if [ ! -f /tmp/foo.txt ]; 
then 
    echo "File not found!" 
fi 

Или записать в несколько ином виде:

if [ ! -f /tmp/foo.txt ] 
    then echo "File not found!" 
fi 

Или вы могли бы использовать:

if ! [ -f /tmp/foo.txt ] 
    then echo "File not found!" 
fi 

Или presing все вместе:

if ! [ -f /tmp/foo.txt ]; then echo "File not found!"; fi 

Что может быть написано (используя «затем» и «o perator: & &) как:

[ ! -f /tmp/foo.txt ] && echo "File not found!" 

который выглядит короче так:

[ -f /tmp/foo.txt ] || echo "File not found!" 

2

Этот скрипт работает также для поиска файла в каталоге:

echo "enter file" 

read -r a 

if [ -s /home/trainee02/"$a" ] 
then 
    echo "yes. file is there." 
else 
    echo "sorry. file is not there." 
fi 
+2

Непонятно, что это добавляет ничего, что другие ответы еще не заданы. Он жестко кодирует имя пути. Поскольку вопрос помечен тегом [tag: bash], он может использовать 'read -p 'Введите имя файла:« -r a', чтобы запросить, а также прочитать. Он использует кавычки вокруг переменной; это хорошо, но нужно объяснить. Возможно, было бы лучше, если бы оно повторило имя файла. И это проверяет, что файл существует и не пуст (это значение '-s'), тогда как вопрос задает вопрос о любом файле, пустом или нет (для которого' -f' является более подходящим). 05 авг. 152015-08-05 21:01:12


35

Чтобы проверить файл , параметр может быть любым из следующих:

-e: Returns true if file exists (regular file, directory, or symlink) 
-f: Returns true if file exists and is a regular file 
-d: Returns true if file exists and is a directory 
-h: Returns true if file exists and is a symlink 

Все тесты ниже, применяются к обычным файлам, каталогам и симлинками:

-r: Returns true if file exists and is readable 
-w: Returns true if file exists and is writable 
-x: Returns true if file exists and is executable 
-s: Returns true if file exists and has a size > 0 

Пример сценария:

#!/bin/bash 
FILE=$1 

if [ -f "$FILE" ]; then 
    echo "File $FILE exists" 
else 
    echo "File $FILE does not exist" 
fi 

340

Тестирование Bash Файл

-b filename - блок специальный файл
-c filename - Файл специального символа
-d directoryname - Проверка наличия на складе:
-e filename - Проверить наличие файла, независимо от его типа (узла, каталога, сокета и т. Д.).)
-f filename - Проверка для регулярного файла существования не каталог
-G filename - Проверьте, если файл существует и принадлежит эффективный идентификатор группы
-G filename set-group-id - Истина, если файл существует и установить-группы ID
-k filename - Липкий бит
-L filename - Символическая ссылка
-O filename - Истина, если файл существует и принадлежит эффективный идентификатор пользователя
-r filename - Проверьте, если файл является читаемым
-S filename - C щеколда, если файл сокет
-s filename - Проверьте, если файл ненулевого размера
-u filename - Проверьте, если бит набор файлов-идентификатор пользователя устанавливаются
-w filename - Проверьте, если файл доступен для записи
-x filename - Проверьте, если файл является исполняемым

Как использовать:

#!/bin/bash 
file=./file 
if [ -e "$file" ]; then 
    echo "File exists" 
else 
    echo "File does not exist" 
fi 

выражение тест могут быть сведены на нет, используя ! оператор

#!/bin/bash 
file=./file 
if [ ! -e "$file" ]; then 
    echo "File does not exist" 
else 
    echo "File exists" 
fi 
  0

@ 0x90 Если вы хотите, вы можете редактировать мой пост и добавлять его в список. Наверное, вы имеете в виду: '-n String' - Проверьте, не длина ли строки. Или вы имеете в виду 'file1 -nt file2' - проверьте, является ли файл1 более новым, чем файл 2 (вы также можете использовать -ot для более старого) 05 май. 142014-05-05 10:59:13

  0

О -n:' Унарный оператор -z проверяет пустую строку, а -n или никакой оператор вообще не вернется. Истина, если строка не пуста. '~ http://www.ibm.com/developerworks/library/l-bash-test/index.html 05 май. 142014-05-05 11:06:20


4

Самый простой способ

FILE=$1 
[ ! -e "${FILE}" ] && echo "does not exist" || echo "exists" 
  0

Infact this this наиболее подходящим способом, поскольку e означает чтобы проверить существование. 28 апр. 152015-04-28 17:29:38


9

Вы можете использовать Bash конкретны:

[[ ! -f "$FILE" ]] && echo "File doesn't exist" 

или

if [[ ! -f "$FILE" ]]; then 
    echo "File doesn't exist" 
fi 

Если вы хотите проверить на фил e и папку оба, затем используйте опцию -e вместо -f.

+1

Это не зависит от bash. Синтаксис происходит из оболочки Korn и также доступен в zsh и bash. Однако он имеет ограниченное преимущество над стандартной утилитой '[' здесь. 03 янв. 182018-01-03 10:38:31

  0

_regular_ файлы (как проверено '-f') и _directories_ являются всего лишь двумя разными типами _files_. Существуют также сокеты, symlinks, devices, fifos, doors ... '[-e' будет проверять существование файла (любого типа, включая регулярный, fifo, каталог ...) _after symlink resolution_. 03 янв. 182018-01-03 10:42:36

  0

@StephaneChazelas: Я не вижу никаких тегов ksh или zsh в любом месте. Мы говорим о bash или о чем-то стандартизированном в большинстве систем unix. Таким образом, в контексте, это зависит от bash. OP не нужно знать о каких бы то ни было оболочках: D 03 янв. 182018-01-03 15:59:32

  0

Это был комментарий к _ вашему ответу. 03 янв. 182018-01-03 16:03:30

  0

@StephaneChazelas: Да, и в контексте (bash и standard sh), это зависит от bash. Я не вижу смысла в вашем втором комментарии, это полностью вне контекста. OP не нуждается в '-e', ему нужно' -f'. 03 янв. 182018-01-03 16:37:52


7

Этот код также работает.

#!/bin/bash 
FILE=$1 
if [ -f $FILE ]; then 
echo "File '$FILE' Exists" 
else 
echo "The File '$FILE' Does Not Exist" 
fi 

17

Есть три различных способа сделать это:

  1. нивелируют статус выхода с Баш (другого ответа не сказал об этом):

    if ! [ -e "$file" ]; then 
        echo "file does not exist" 
    fi 
    

    Или:

    ! [ -e "$file" ] && echo "file does not exist" 
    
  2. Negate th е испытание внутри тестовой команды [ (то есть, как большинство ответов, прежде чем представили):

    if [ ! -e "$file" ]; then 
        echo "file does not exist" 
    fi 
    

    Или:

    [ ! -e "$file" ] && echo "file does not exist" 
    
  3. Закон о результате теста является отрицательным (|| вместо &&):

    только:

    [ -e "$file" ] || echo "file does not exist" 
    

    Это выглядит глупо (IMO), не использовать его, если ваш код не должен быть переносимым на оболочке Борна (подобно /bin/sh Соляриса 10 или выше), что не хватало оператора трубопровода отрицания (!):

    if [ -e "$file" ]; then 
        : 
    else 
        echo "file does not exist" 
    fi 
    
  0

Любая разница в переносимости между '! ['и' [! '? 18 авг. 152015-08-18 03:42:15

+3

'! ['[это POSIX для конвейеров оболочки 2.9.2 (любая команда)] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_02)' В противном случае статус выхода должен быть логическим NOT статуса выхода последней команды' и '[! '[это POSIX для теста] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html#tag_20_128)'! expression True, если выражение false.False, если выражение истинно. Итак, оба являются POSIX, и, по моему опыту, они широко поддерживаются. 18 авг. 152015-08-18 04:16:08

  0

@FrozenFlame, у оболочки Bourne не было ключевого слова '!', Которое было введено оболочкой Korn. Кроме, возможно, для Solaris 10 и старше, вы вряд ли встретите оболочку Bourne в наши дни. 03 янв. 182018-01-03 10:39:43


9

в

[ -f "$file" ] 

команда [ делает stat() (не lstat()) системный вызов на пути, хранящегося в $file и возвращает истинное, если этот системный вызов завершается успешно, а тип файла, возвращаемый stat(), является «обычным».

Так что если [ -f "$file" ] возвращает true, вы можете указать, что файл существует и является обычным файлом или символической ссылкой, в конечном итоге разрешающей обычный файл (или, по крайней мере, это было во время stat()).

Однако, если она возвращает ложных (или если [ ! -f "$file" ] или ! [ -f "$file" ] возвращения истины), есть много различных возможностей:

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

Короче говоря, он должен быть:

if [ -f "$file" ]; then 
    printf '"%s" is a path to a regular file or symlink to regular file\n' "$file" 
elif [ -e "$file" ]; then 
    printf '"%s" exists but is not a regular file\n' "$file" 
elif [ -L "$file" ]; then 
    printf '"%s" exists, is a symlink but I cannot tell if it eventually resolves to an actual file, regular or not\n' "$file" 
else 
    printf 'I cannot tell if "%s" exists, let alone whether it is a regular file or not\n' "$file" 
fi 

Чтобы знать наверняка, что файл не существует, мы должны были бы в stat() системный вызов, чтобы вернуться с кодом ошибки ENOENT (ENOTDIR говорит, что один из компонентов пути не является каталогом, это другой случай, когда мы можем сказать, что этот файл не существует по этому пути). К сожалению, команда [ не дает нам знать об этом. Он вернет false, является ли код ошибки ENOENT, EACCESS (разрешение отклонено), ENAMETOOLONG или что-то еще.

Тест [ -e "$file" ] также может быть выполнен с помощью ls -Ld -- "$file" > /dev/null. В этом случае, ls расскажет вам, почему stat() не удалось, хотя эта информация не может быть легко использована программно:

$ file=/var/spool/cron/crontabs/root 
$ if [ ! -e "$file" ]; then echo does not exist; fi 
does not exist 
$ if ! ls -Ld -- "$file" > /dev/null; then echo stat failed; fi 
ls: cannot access '/var/spool/cron/crontabs/root': Permission denied 
stat failed 

ls По крайней мере, говорит мне, что это не потому, что файл не существует, что она выходит из строя. Это потому, что он не может определить, существует ли файл или нет. Команда [ просто проигнорировала проблему.

С zsh оболочки, вы можете запросить код ошибки со специальной переменной $ERRNO после неисправного [ команды и декодировать этот номер, используя $errnos специальный массив в zsh/system модуле:

zmodload zsh/system 
ERRNO=0 
if [ ! -f "$file" ]; then 
    err=$ERRNO 
    case $errnos[err] in 
    ("") echo exists, not a regular file;; 
    (ENOENT|ENOTDIR) 
     if [ -L "$file" ]; then 
     echo broken link 
     else 
     echo does not exist 
     fi;; 
    (*) echo "can't tell"; syserror "$err" 
    esac 
fi 

(остерегайтесь $errnos support is broken with some versions of zsh when built with recent versions of gcc).

  0

Красиво объяснено! Вопрос: этот Стефан Хазелас, парень, который обнаружил шок? :) 25 фев. 182018-02-25 22:54:28


1

иногда может быть полезно использовать & & и || операторы.

Как и в (если у вас есть команда «тест»):

test -b $FILE && echo File not there! 

или

test -b $FILE || echo File there!