Нужно проверить, существует ли каталог в скрипте оболочки, работающем в Linux или Unix-подобной системе?
Как проверить, существует ли каталог в скрипте оболочки?
Каталог – это не что иное, как место для хранения файлов в системе Linux в иерархическом формате.
Например, $HOME/Downloads/ будет хранить все загруженные файлы или /tmp/ будет хранить временные файлы.
В этой статье показано, как узнать, существует ли каталог в Linux или Unix-подобных системах.
Как проверить, существует ли каталог в Linux
Можно проверить, существует ли каталог в скрипте оболочки Linux, используя следующий синтаксис:
- [ -d "/path/dir/" ] && echo "Directory /path/dir/ exists."
Вы можете использовать ! чтобы проверить, существует ли каталог в Unix:
- [ ! -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-подобных системах.