コマンドライン引数またはユーザー入力(読み取りコマンド)を介して変数を設定するように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"
条件を確認するためにさまざまな構造を使用していることに注意してください。さまざまなアプローチがあり、ユーザーにとってより便利なものを選択できることを示すためです。
|| &&
また、間にある部分に問題があっても抜けることがありますので、ご使用の際にさらにご注意ください。|| ...
&& .. ||