Bashスクリプトでコマンドライン引数を使用して変数値を設定できますか?

Bashスクリプトでコマンドライン引数を使用して変数値を設定できますか?

コマンドライン引数またはユーザー入力(読み取りコマンド)を介して変数を設定するようにbashスクリプトを変更したいと思います。引数がコマンドラインに渡されると、ユーザー入力を要求せずにスクリプトを実行する必要があります。

コマンドライン引数またはユーザー入力に変数を設定できますが、同じスクリプトに両方を設定することはできません。

#!/bin/sh

ENVIRONMENT_NAME=$1
EMAIL=$2

read ENVIRONMENT_NAME
read EMAIL

echo "$ENVIRONMENT_NAME"
echo "$EMAIL" 

次のように読み取りコマンドを実行すると、$ 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"

条件を確認するためにさまざまな構造を使用していることに注意してください。さまざまなアプローチがあり、ユーザーにとってより便利なものを選択できることを示すためです。

|| &&また、間にある部分に問題があっても抜けることがありますので、ご使用の際にさらにご注意ください。|| ...&& .. ||

関連情報