直 bash 空参数无法识别
Straight bash empty parameter not recognized
美好的一天!
出于学习目的,我正在开发一个 Django 项目。现在我有一些 bash 脚本(正常工作)来迁移我的 Django 数据库并创建一个具有 onetoone 配置文件的超级用户。
现在我想更新我的 bash 脚本,以便它识别一些参数。例如,在成功迁移数据库后自动 运行 模型迁移 (makemigrations) 或 运行 服务器。
所以我想告诉 bash 在迁移之前进行迁移,并在完成后 运行 服务器(没有值的键)。
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m -r
现在,我是 Linux 的新手,也是 Straight Bash Space Separated bash 脚本的新手。我读过在这种情况下使用 getopt[s] 没有用,因为它不能处理空参数字符串。
所以我尝试创建直线 Bash Space 分隔如下:
#!/usr/bin/env bash
while [[ %# > 1 ]]
do
key=
case $key in
-m|--makemigrations)
MAKEMIGRATIONS=true
shift
;;
-r|--runserver)
RUNSERVER=true
shift
;;
*)
echo "invalid argument"
;;
esac
shift
done
echo "${RUNSERVER}"
echo "${MAKEMIGRATIONS}"
无论我尝试发起什么
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m -r
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m "test" -r "test"
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m test -r test
我不断得到结果
false
false
可能是初学者的错误,但我似乎无法弄清楚...
你能给我解释一下我做错了什么,并引导我朝着正确的方向解决问题吗?
提前致谢!
三个错误:
1) %#
应该是 $#
2) 在接受密钥的情况下,您有两条 shift
指令(一条在 case
内,一条在 while
循环末尾)。只需删除 case
内的 shift
并保留循环末尾的 shift
即可(记住,即使无法识别键,您也想换档)。
3) $#
给出了不包括程序名的参数个数,所以 while 循环条件应该是 while [[ $# > 0 ]]
美好的一天!
出于学习目的,我正在开发一个 Django 项目。现在我有一些 bash 脚本(正常工作)来迁移我的 Django 数据库并创建一个具有 onetoone 配置文件的超级用户。
现在我想更新我的 bash 脚本,以便它识别一些参数。例如,在成功迁移数据库后自动 运行 模型迁移 (makemigrations) 或 运行 服务器。
所以我想告诉 bash 在迁移之前进行迁移,并在完成后 运行 服务器(没有值的键)。
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m -r
现在,我是 Linux 的新手,也是 Straight Bash Space Separated bash 脚本的新手。我读过在这种情况下使用 getopt[s] 没有用,因为它不能处理空参数字符串。
所以我尝试创建直线 Bash Space 分隔如下:
#!/usr/bin/env bash
while [[ %# > 1 ]]
do
key=
case $key in
-m|--makemigrations)
MAKEMIGRATIONS=true
shift
;;
-r|--runserver)
RUNSERVER=true
shift
;;
*)
echo "invalid argument"
;;
esac
shift
done
echo "${RUNSERVER}"
echo "${MAKEMIGRATIONS}"
无论我尝试发起什么
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m -r
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m "test" -r "test"
(venv)edwin@edwin:/project/installs/$ source install_database.sh -m test -r test
我不断得到结果
false
false
可能是初学者的错误,但我似乎无法弄清楚... 你能给我解释一下我做错了什么,并引导我朝着正确的方向解决问题吗?
提前致谢!
三个错误:
1) %#
应该是 $#
2) 在接受密钥的情况下,您有两条 shift
指令(一条在 case
内,一条在 while
循环末尾)。只需删除 case
内的 shift
并保留循环末尾的 shift
即可(记住,即使无法识别键,您也想换档)。
3) $#
给出了不包括程序名的参数个数,所以 while 循环条件应该是 while [[ $# > 0 ]]