LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1433|回复: 6

请教:在bash下,如何判断输入路径是否为绝对路径?

[复制链接]
发表于 2007-1-25 16:58:27 | 显示全部楼层 |阅读模式
请教:在bash下,如何判断输入路径是否为绝对路径?

我用的方法是通过判断输入是否为“/”来确定输入是否为绝对路径。
但是测试时,不论输入的是绝对路径还是相对路径,都提示不是绝对路径。

以下是开头的一段:

#if [ $s_dir != "^/" ]
if [ $s_dir != "^//" ]
           then
             echo "错误的输入:"
             echo "    $s_dir不是绝对路径"
             if [ $d_dir != "^/" ]
                then
                  echo "    $d_dir不是绝对路径"
                  echo "因为您错误的输入,程序将退出。"
                  echo "您可以检查正确的输入后从新运行本程序。"
                  break
             fi
             echo "因为您错误的输入,程序将退出。"
             echo "您可以检查正确的输入后从新运行本程序。"
             break


以下是测试时的两个输出:

#1
错误的输入:
    /home不是绝对路径
    ./d不是绝对路径
因为您错误的输入,程序将退出。
您可以检查正确的输入后从新运行本程序。
#2
错误的输入:
    /home不是绝对路径
    /mnt不是绝对路径
因为您错误的输入,程序将退出。
您可以检查正确的输入后从新运行本程序。


非常明显,"/home"和"/mnt"是绝对路径,"./d"是相对路径。

哪位大哥帮忙看看是哪出的错?
如果是我的测试方法不对,请给出正确的测试方法,谢谢。
 楼主| 发表于 2007-1-25 18:46:03 | 显示全部楼层
没人知道吗?
回复 支持 反对

使用道具 举报

发表于 2007-1-25 20:07:55 | 显示全部楼层
我认为使用if结构不太合适,你可以试一下case结构

  1. case $1 in
  2. /*)
  3.    echo "right, absolute path!";;
  4. *)
  5.    echo "not absoluet path!";;
  6. esac
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-25 20:26:40 | 显示全部楼层
bash 的比较 不支持"^/",

if [ "${s_dir#/}" != "${s_dir}" ]
then
绝对路径;
fi
Post by superspecter007
请教:在bash下,如何判断输入路径是否为绝对路径?

我用的方法是通过判断输入是否为“/”来确定输入是否为绝对路径。
但是测试时,不论输入的是绝对路径还是相对路径,都提示不是绝对路径。

以下是开头的一段:

#if [ $s_dir != "^/" ]
if [ $s_dir != "^//" ]
           then
             echo "错误的输入:"
             echo "    $s_dir不是绝对路径"
             if [ $d_dir != "^/" ]
                then
                  echo "    $d_dir不是绝对路径"
                  echo "因为您错误的输入,程序将退出。"
                  echo "您可以检查正确的输入后从新运行本程序。"
                  break
             fi
             echo "因为您错误的输入,程序将退出。"
             echo "您可以检查正确的输入后从新运行本程序。"
             break


以下是测试时的两个输出:

#1
错误的输入:
    /home不是绝对路径
    ./d不是绝对路径
因为您错误的输入,程序将退出。
您可以检查正确的输入后从新运行本程序。
#2
错误的输入:
    /home不是绝对路径
    /mnt不是绝对路径
因为您错误的输入,程序将退出。
您可以检查正确的输入后从新运行本程序。


非常明显,"/home"和"/mnt"是绝对路径,"./d"是相对路径。

哪位大哥帮忙看看是哪出的错?
如果是我的测试方法不对,请给出正确的测试方法,谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-26 00:07:32 | 显示全部楼层
楼上两位的方法都测试成功了。

用case的方法我理解了。

用[ "${s_dir#/}" != "${s_dir}" ]的方法我查了下书,但还是不太理解。
lastsrt兄能讲解一下吗?
回复 支持 反对

使用道具 举报

发表于 2007-1-26 01:00:18 | 显示全部楼层
  1. [0 No.1987 huan@huan ~]$ [[ "/a/b/c" == /* ]] && echo Yes || echo No
  2. Yes
  3. [0 No.1988 huan@huan ~]$ echo $BASH_VERSION
  4. 3.1.17(1)-release
  5. [0 No.1989 huan@huan ~]$
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-1-26 22:57:53 | 显示全部楼层
不错, bash什么时候有这个功能的, 我一直都没注意到.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表