在bash脚本中,我们可以使用命令行参数设置变量值吗

在bash脚本中,我们可以使用命令行参数设置变量值吗

我希望修改 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"

请注意,我使用不同的结构进行条件检查,只是为了表明有不同的方法,您可以选择对您来说更方便的一种。

另请注意,使用 时应更加小心,因为即使 之间的部分出现问题,|| &&它也可能会落入。|| ...&& .. ||

相关内容