正确使用getopts的方法

时间:2015-05-27 16:44:54

标签: shell getopts

执行以下脚本会给 mkdir 命令

带来错误
PATH=/root
while getopts "r" name;
do
    case $name in
        r)
            PATH=/home
            ;;
        *)
            echo "Usage: $0 -r"
            ;;
    esac
done

echo $PATH
mkdir new

错误:

./test.sh: line 15: mkdir: command not found

这个剧本有什么问题?

1 个答案:

答案 0 :(得分:3)

您的问题与getopts没有任何关系。

问题是第一行:

PATH=/root

或者,如果它被执行,这一行:

PATH=/home

这会将命令的搜索路径设置为 /root/home目录。 (通常这些目录都不包含任何命令)。

设置$PATH会丢弃先前的值。 mkdir可能在/bin,但由于/bin已不在$PATH,因此shell无法找到它。

您不会在getopts命令上收到错误,因为它已内置到您正在使用的shell中。

如果您想将/root添加到$PATH,请使用:

PATH="/root:$PATH"

PATH="$PATH:/root"

但是,您的脚本中的任何内容似乎都不依赖于/root中的$PATH。你为什么一开始就做PATH=/root?如果您尝试将当前工作目录设置为/root/home,则需要chdir命令。