检查参数是否是路径

时间:2014-04-26 11:30:54

标签: bash

我正在用bash编写脚本。它将收到2到5个参数。例如:

./foo.sh -n -v SomeString Type Directory

-n,-v和Directory是可选的。 如果脚本没有收到参数Directory,它将在当前目录中搜索字符串。 否则它将遵循收到的路径并在那里搜索。如果此目录不存在,它将发送一条消息。

问题是:有没有办法检查最后一个arg是否是路径?

3 个答案:

答案 0 :(得分:4)

您可以使用变量引用获取最后一个参数:

numArgs=$#
lastArg="${!numArgs}"

# check if last argument is directory

if [[ -d "$lastArg" ]]; then
   echo "it is a directory"
else
   echo "it is not a directory"
fi

答案 1 :(得分:2)

你可以用这个:

#!/bin/bash

if [[ -d ${!#} ]]
then
    echo "DIR EXISTS"
else
    echo "dosen't exists"
fi

答案 2 :(得分:1)

首先,使用getopts来解析选项-n-v(必须在任何非选项之前使用它们,但这通常不是问题)。

while getopts nv opt; do
    case $opt in
        n) nflag=1 ;;
        v) vflag=1 ;;
        *) printf >&2 "Unrecognized option $opt\n"; exit 1 ;;
    esac
done
shift $((OPTIND-1))

现在,$@中只有两个必需参数,可能还有第三个可选参数。

string_arg=$1
type_arg=$2
dir_arg=$3

if [ -d "$dir_arg" ]; then
    # Do something with valid directory
fi

请注意,此代码适用于任何符合POSIX标准的shell,而不仅仅是bash

相关问题