⛱ Проверьте, существует ли каталог в оболочке Linux или Unix |

⛱ Проверьте, существует ли каталог в оболочке Linux или Unix

Скрипты

Нужно проверить, существует ли каталог в скрипте оболочки, работающем в Linux или Unix-подобной системе?

Как проверить, существует ли каталог в скрипте оболочки?

Каталог – это не что иное, как место для хранения файлов в системе Linux в иерархическом формате.

Например, $HOME/Downloads/ будет хранить все загруженные файлы или /tmp/ будет хранить временные файлы.

В этой статье показано, как узнать, существует ли каталог в Linux или Unix-подобных системах.

Как проверить, существует ли каталог в Linux

Можно проверить, существует ли каталог в скрипте оболочки Linux, используя следующий синтаксис:

  1. [ -d "/path/dir/" ] && echo "Directory /path/dir/ exists."

Вы можете использовать ! чтобы проверить, существует ли каталог в Unix:

  1. [ ! -d "/dir1/" ] && echo "Directory /dir1/ DOES NOT exists."

Можно проверить, существует ли каталог в скрипте Linux следующим образом:

DIR="/etc/httpd/"
if [ -d "$DIR" ]; then
  # Take action if $DIR exists. #
  echo "Installing config files in ${DIR}..."
fi

 

или

DIR="/etc/httpd/"
if [ -d "$DIR" ]; then
  ### Take action if $DIR exists ###
  echo "Installing config files in ${DIR}..."
else
  ###  Control will jump here if $DIR does NOT exists ###
  echo "Error: ${DIR} not found. Can not continue."
  exit 1
fi

Linux проверяет, существует ли каталог, и предпринимает какие-то действия

Вот пример скрипта оболочки, чтобы увидеть, существует ли папка в Linux:

 #!/bin/bash d="$1"   [ "$d" == "" ] && { echo "Usage: $0 directory"; exit 1; } [ -d "${d}" ] && echo "Directory $d found." || echo "Directory $d not found." 

Запустите его следующим образом:

./test.sh
./test.sh /tmp/
./test.sh /itsecforu

Проверьте, существует ли каталог в bash, и если нет, то создайте его.

Вот пример скрипта оболочки, чтобы проверить, не существует ли каталог, и создать его в соответствии с нашими потребностями:

#!/bin/bash
dldir="$HOME/linux/5.x"
_out="/tmp/out.$$"
 
# Build urls
url="some_url/file.tar.gz"
file="${url##*/}"
 
### Check for dir, if not found create it using the mkdir ##
[ ! -d "$dldir" ] && mkdir -p "$dldir"
 
# Now download it
wget -qc "$url" -O "${dldir}/${file}"
 
# Do something else below #

Убедитесь, что вы всегда заключаете переменные оболочки, такие как $DIR, в двойные кавычки («$DIR», чтобы избежать неожиданностей в ваших скриптах:

DIR="foo"
[ -d "$DIR" ] && echo "Found"
##
## this will fail as DIR will only expand to "foo" and not to "foo bar stuff" 
## hence wrap it 
##
DIR="foo bar stuff"
[ -d $DIR ] && echo "Found"

 

Использование команды test

Команду test можно использовать для проверки типов файлов и сравнения значений.

Например, посмотрите, существует ли FILE и является ли он каталогом. Синтаксис:

 test -d "DIRECTORY" && echo "Found/Exists" || echo "Does not exist" 

Команда test аналогична [условному выражению. Следовательно, вы также можете использовать следующий синтаксис:

[ -d "DIR" ] && echo "yes" || echo "noop"

Помощь

 man bash
help [
help [[
man test 

Заключение

В этой статье описаны различные команды, которые можно использовать для проверки существования каталога в скриптов оболочки, работающем в Linux или Unix-подобных системах.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий

  1. Alex

    Админ, спасай, выручай!

    В общем, в /mnt надо создать каталоги. Кусок скрипта:

    #!/bin/bash

    if[ ! -d “/mnt/1” -a ! -d “/mnt/2” -a ! -d “/mnt/4” -a ! -d “/mnt/5” -a ! -d “/mnt/6” -a ! -d “/mnt/7” -a ! -d “/mnt/8” -a ! -d “/mnt/9” -a ! -d “/mnt/10” -a ! -d “/mnt/11” ] ; then
    sudo mkdir /mnt/{1,2,3,4,5,6,7,8,9,10,11}
    sudo chmod 777 -R
    mnt/{1,2,3,4,5,6,7,8,9,10,11} ;
    fi

    идет ругань на синтаксическую ошибку “then” если убрать ; то идет ругань на “fi”
    проблема в ;. В примерах ее нужно писать.

    Подскажи как правильно написать скрипт, всю голову сломал.
    Идет проверка, что этих каталогов не существует и он их создает и дает права.

    Спасибо

    Ответить
  2. Alex

    Все, я дошел, пробелы не так поставлены и ;

    Ответить