我正在使用bash编写脚本。它会收到2到5个参数。例如:检查参数是否为路径
./foo.sh -n -v SomeString Type Directory
-n,-v和目录都是可选的。 如果脚本没有收到参数目录,它将在当前目录中搜索一个字符串。否则它会按照接收到的路径在那里搜索。如果这个目录不存在,它会发送一条消息。
问题是:有没有办法检查最后一个参数是否是路径?
我正在使用bash编写脚本。它会收到2到5个参数。例如:检查参数是否为路径
./foo.sh -n -v SomeString Type Directory
-n,-v和目录都是可选的。 如果脚本没有收到参数目录,它将在当前目录中搜索一个字符串。否则它会按照接收到的路径在那里搜索。如果这个目录不存在,它会发送一条消息。
问题是:有没有办法检查最后一个参数是否是路径?
你可以使用变量引用最后一个参数:
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
如果最后的参数不是路径会怎么样?正如我所说,目录是可选参数。 – user1872329
请参阅编辑部分,您在其他块中处理该情况。 – anubhava
好的。如果用户不确定要搜索的目录,最后一个参数将是类型(例如“* .txt”)。输出将是“它不是一个目录”,对吗? – user1872329
您可以使用此:
#!/bin/bash
if [[ -d ${!#} ]]
then
echo "DIR EXISTS"
else
echo "dosen't exists"
fi
首先,使用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))
,你将有只有你的两个参数,并可能你的第三个可选参数,在[email protected]
。
string_arg=$1
type_arg=$2
dir_arg=$3
if [ -d "$dir_arg" ]; then
# Do something with valid directory
fi
请注意,此代码可以在任何POSIX兼容的shell中运行,而不仅仅是bash
。
是的,但我需要知道,如果最后的参数是一个路径。如果不是,脚本将在当前目录中搜索。如果是,但不存在,脚本会向stderr发送消息。 – user1872329