区分目录名称或目录的路径

时间:2011-05-11 06:31:01

标签: linux shell unix

我有一个shell脚本,它接受目录名称或目录命令行的路径,并创建该目录。如果我想确定参数是有效路径还是只有目录名,我该如何实现?好像传递了一个目录名,然后该目录将在脚本执行的位置创建,如果是一个路径,那么将在该路径上创建该目录。所以这个区别对我的剧本来说是必要的。

谢谢和问候。

3 个答案:

答案 0 :(得分:1)

某些程序以不同的方式处理带有'/'的参数。考虑:

./foo x

./foo x/

但是,如果适用的话,我会鼓励使用“标签”/“选项”,因为上面的内容是一个非常微妙的细节。 (想想用户!)。

./foo -p x

./foo --path=x

./foo x

快乐的编码。

答案 1 :(得分:1)

我不确定你的意思,也不相信你需要做出这样的区分:mkdir -- "$1"创建一个目录,无论你如何呈现它的名称。

要测试第一个参数是否是没有路径组件的简单目录名称(例如foo但不是foo/bar/abso/lute),请测试它是否包含/

case "$1" in
  */*) echo "contains multiple path components";;
  *) echo "no slash, just a base name";;
esac

要测试第一个参数是相对路径还是绝对路径,请测试它是否以/开头:

case "$1" in
  /*) echo "absolute";;
  *) echo "relative";;
esac

无论您是在考虑文件还是目录,这都适用。

答案 2 :(得分:0)

dir=$(dirname -- "$1")

if test "$dir" != '.'; then
    echo 'Path'
else
    echo 'Directory'
fi