От новичка до гуру: Курсы программирования на CyberDuff

Команда не найдена в условии Bash IF-ELSE при использовании [! -d $КАТАЛОГ]

у меня такой код

#!/bin/bash 
DIR="test_dir/";
if [! -d "$DIR"]; then
    # If it doesn't create it
    mkdir $DIR
fi

Но почему его выполнение дало мне это:

./mycode.sh: line 16: [!: command not found

Как правильно это сделать?

08.08.2013

  • Имя [ — это имя команды, а не случайный знак препинания. Точно так же, как вам нужен пробел между cat и /etc/passwd в cat/etc/passwd, вам нужен пробел между [ (имя команды) и ! (один из ее аргументов). Точно так же последний аргумент должен быть ]. Это требование восходит к древней истории (7-я редакция UNIX™ около 1978 г. или ранее), когда оболочка не имела встроенной команды test (также известной как [), а единственной командой test была /bin/test и ее (жесткая) ссылка /bin/[. 08.08.2013

Ответы:


1

Добавьте пробел между [ и !. И перед] также.

#!/bin/bash 
DIR="test_dir/";
if [ ! -d "$DIR" ]; then
    # If it doesn't create it
    mkdir $DIR
fi

Также неплохо указать вашу переменную:

    mkdir "$DIR"
08.08.2013

2

Добавьте пробелы:

if [ ! -d "$DIR" ]; then
#   ^           ^
08.08.2013

3

Вы также можете попытаться просто сказать:

test -d "${dir}" || mkdir "${dir}"

Это создаст каталог, если он не существует.

08.08.2013
  • Или, еще проще: mkdir -p "$DIR" (используя имя в верхнем регистре, как в вопросе). Это создает все каталоги, необходимые на пути, но успешно, если каталог уже существует. 08.08.2013
  • @JonathanLeffler Да, mkdir -p foo сам по себе не причиняет никакого вреда. 08.08.2013
  • Новые материалы

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..

    Как работает дистанционное парное программирование и почему оно может изменить вашу жизнь
    Серебряная пуля от одиночества и отвлекающих факторов во время обучения программированию Независимо от того, работаете ли вы или учитесь удаленно, велика вероятность, что одиночество и..