getopts 的正确使用方法
Correct way of using getopts
执行以下脚本会导致 mkdir 命令出错
PATH=/root
while getopts "r" name;
do
case $name in
r)
PATH=/home
;;
*)
echo "Usage: [=10=] -r"
;;
esac
done
echo $PATH
mkdir new
错误:
./test.sh: line 15: mkdir: command not found
这个脚本有什么问题?
你的问题与getopts
没有任何关系。
问题出在第一行:
PATH=/root
或者,如果它被执行,这一行:
PATH=/home
这会将命令的搜索路径设置为只是 /root
或/home
目录。 (通常这些目录都不包含任何命令)。
设置$PATH
会丢弃之前的值。 mkdir
可能在 /bin
中,但由于 /bin
不再在 $PATH
中,shell 无法找到它。
您不会在 getopts
命令上收到错误,因为它内置于您正在使用的 shell 中。
如果您想将 /root
添加到您的 $PATH
,请使用:
PATH="/root:$PATH"
或
PATH="$PATH:/root"
但是您的脚本中似乎没有任何内容依赖于 $PATH
中的 /root
。你为什么要首先做 PATH=/root
?如果您尝试将当前工作目录设置为 /root
或 /home
,您需要 chdir
命令。
执行以下脚本会导致 mkdir 命令出错
PATH=/root
while getopts "r" name;
do
case $name in
r)
PATH=/home
;;
*)
echo "Usage: [=10=] -r"
;;
esac
done
echo $PATH
mkdir new
错误:
./test.sh: line 15: mkdir: command not found
这个脚本有什么问题?
你的问题与getopts
没有任何关系。
问题出在第一行:
PATH=/root
或者,如果它被执行,这一行:
PATH=/home
这会将命令的搜索路径设置为只是 /root
或/home
目录。 (通常这些目录都不包含任何命令)。
设置$PATH
会丢弃之前的值。 mkdir
可能在 /bin
中,但由于 /bin
不再在 $PATH
中,shell 无法找到它。
您不会在 getopts
命令上收到错误,因为它内置于您正在使用的 shell 中。
如果您想将 /root
添加到您的 $PATH
,请使用:
PATH="/root:$PATH"
或
PATH="$PATH:/root"
但是您的脚本中似乎没有任何内容依赖于 $PATH
中的 /root
。你为什么要首先做 PATH=/root
?如果您尝试将当前工作目录设置为 /root
或 /home
,您需要 chdir
命令。