如何检查用户指定的名称是否引用目录?

时间:2017-02-06 02:30:21

标签: linux bash shell

我正在尝试编写一个简单的程序来检查给定的文件名是否指向目录。但我不断收到一个错误,说错误的解释器:没有这样的文件或目录"当我运行./isdir.sh(这是脚本的名称)。

这是我的代码:

#!bin/sh

if [[ $# -ne 1 ]];then
    echo "Usage: $0 dir"
    exit 1
fi

dir="$1"
dirname = "$1"

if [[ ! -d "$dir" ]]; then
    echo "Error: directory $dir not found."
    exit 2
fi

if [[ -d "$dirname" ]]; then
    echo "$dirname is a directory."
    exit 3

另外,重要问题: 如何处理包含空格的输入值?

1 个答案:

答案 0 :(得分:0)

你可以这样做:

#!/bin/bash

if [[ $# -ne 1 ]]; then
  echo "Usage: $0 dir"
  exit 2
fi

dir="$1"
rc=1
if [[ -d "$dir" ]]; then
  # it is a directory
  rc=0
elif [[ -e "$dir" ]]; then
  echo "Error: '$dir' is not a directory"
else 
  echo "Error: directory '$dir' does not exist"
fi

exit "$rc"
  • 不需要dirname变量。
  • 对于名称中包含空格或外卡的目录,该脚本是安全的,因为我们用双引号括起变量。
  • 退出代码2是无效参数错误的Unix标准;退出1是所有其他错误。但是,您可以根据需要更改退出代码。

有关此问题的更多观点,请参阅此相关文章:Check if a directory exists in a shell script