我希望修改 bash 脚本以通过命令行参数或用户输入(读取命令)设置变量。如果参数作为命令行传递,则应执行脚本而不要求用户输入。
我可以在命令行参数或用户输入中设置变量,但不能在同一脚本中同时设置这两种方式
#!/bin/sh
ENVIRONMENT_NAME=$1
EMAIL=$2
read ENVIRONMENT_NAME
read EMAIL
echo "$ENVIRONMENT_NAME"
echo "$EMAIL"
如果我像下面一样执行 read 命令应该从 $1 和 $2 中获取值。
./<scriptname> <environment_name> <email>
答案1
要检查是否提供了参数,您可以查看$#
(参数数量)的值:
#! /bin/sh -
if [ "$#" -ge 1 ]; then
ENVIRONMENT_NAME=$1
else
IFS= read -r ENVIRONMENT_NAME || exit # on EOF
fi
if [ "$#" -ge 2 ]; then
EMAIL=$2
else
IFS= read -r EMAIL || exit # on EOF
fi
答案2
出色地。您必须添加检查是否设置了位置变量。如果没有,则要求使用输入。
像这样的东西:
#!/bin/sh
[ -n "$1" ] && ENVIRONMENT_NAME=$1 || { echo -n "Enter environment name: "; read ENVIRONMENT_NAME; }
if [ -n "$2" ]; then
EMAIL=$2
else
echo -n "Enter email: "
read EMAIL
fi
echo "env=$ENVIRONMENT_NAME"
echo "email=$EMAIL"
请注意,我使用不同的结构进行条件检查,只是为了表明有不同的方法,您可以选择对您来说更方便的一种。
另请注意,使用 时应更加小心,因为即使 之间的部分出现问题,|| &&
它也可能会落入。|| ...
&& .. ||