【发布时间】:2016-03-04 00:55:18
【问题描述】:
美好的一天!
出于学习目的,我正在开发一个 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] 没有用,因为它不能处理空参数字符串。
所以我尝试创建像这样分隔的 Straight Bash Space:
#!/usr/bin/env bash
while [[ %# > 1 ]]
do
key=$1
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
可能是初学者的错误,但我似乎无法弄清楚...... 你能解释一下我做错了什么,并推动我朝着正确的方向解决问题吗?
提前致谢!
【问题讨论】:
-
脚本中没有提到“False”。它从何而来?另外,
%#是什么? -
我一直在网上搜索以了解如何让 bash 接受参数。这导致我 http://stackoverflow.com/questions/192249/how-do-i-parse-command-line-arguments-in-bash/14203146#14203146 我不确定它是如何得到错误的,但是我想它可能会在空或未设置的变量上返回 false?关于 %#,我认为这是计算参数数量的某种形式。根据您的反应,这可能是一个错误的假设(注意:False = false(小写,我的错))
标签: linux bash command-line-arguments