у меня такой код
#!/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
Как правильно это сделать?
у меня такой код
#!/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
Как правильно это сделать?
[
— это имя команды, а не случайный знак препинания. Точно так же, как вам нужен пробел между cat
и /etc/passwd
в cat/etc/passwd
, вам нужен пробел между [
(имя команды) и !
(один из ее аргументов). Точно так же последний аргумент должен быть ]
. Это требование восходит к древней истории (7-я редакция UNIX™ около 1978 г. или ранее), когда оболочка не имела встроенной команды test
(также известной как [
), а единственной командой test
была /bin/test
и ее (жесткая) ссылка /bin/[
. 08.08.2013 Добавьте пробел между [ и !. И перед] также.
#!/bin/bash
DIR="test_dir/";
if [ ! -d "$DIR" ]; then
# If it doesn't create it
mkdir $DIR
fi
Также неплохо указать вашу переменную:
mkdir "$DIR"
Добавьте пробелы:
if [ ! -d "$DIR" ]; then
# ^ ^
Вы также можете попытаться просто сказать:
test -d "${dir}" || mkdir "${dir}"
Это создаст каталог, если он не существует.
mkdir -p "$DIR"
(используя имя в верхнем регистре, как в вопросе). Это создает все каталоги, необходимые на пути, но успешно, если каталог уже существует. 08.08.2013 mkdir -p foo
сам по себе не причиняет никакого вреда. 08.08.2013