我正在编写一个小型 shell 脚本,但现在陷入了必须根据获得的输入创建目录的境地。下面是场景
我有2个目录
DIR_PRE=/path/to/dir/dir_PRE
DIR_POST=/path/to/dir/dir_POST
现在,我想使用一个函数根据发送到函数的输入创建任一目录,即
- 如果我发送
create_dir PRE
它应该创建第一个目录并且 - 如果我发送
create_dir POST
它应该创建第二个目录。
create_dir
是下面定义的函数:
create_dir ()
{
STAGE=$1
mkdir -p $DIR_${STAGE} # <-- how to get this right?
}
答案1
您应该尝试避免使用大写的变量名。这些不是您想要导出的变量,应该不会让您感到困惑。这是一个简单的代码片段,您可以运行它以获得您想要的东西
#!/usr/bin/env bash
dir_pre="$HOME"/dir_PRE
dir_post="$HOME"/dir_POST
die(){ echo >&2 "$@"; exit 1; }
create_dir()
{
local dir="$1"
case $dir in
PRE) mkdir -p "$dir_pre";;
POST) mkdir -p "$dir_post";;
*) die "option not known";;
esac
}
create_dir "$@"
答案2
一种相对简单的方法是使用if
构造:
create_dir()
{
if [[ $1 == "PRE" ]]
then
mkdir -p "$DIR_PRE"
elif [[ $1 == "POST" ]]
then
mkdir -p "$DIR_POST"
else
echo "Illegal argument $1!"
fi
}