ユーザーが入力を完了するまで、複数のドメイン名に対するユーザー入力を受け取る必要があります。入力は1つのドメイン名でも複数のドメイン名でもかまいません。そしてドメイン名はカンマで区切る必要があります,
。
ドメイン名を次のコマンドに渡すにはどうすればよいですか?助けてください。
keytool -genkey -keystore tc_keystore.jks -keysize 2048 -keypass password -storepass password -keyalg RSA \
-dname "CN=domain1.com,OU=Devteam,O=Softech,L=Chicago,ST=IL,C=US" \
-alias domain1.com -ext san=dns:domain2,domain3,domain4,domain5,domain6,domain7
私はシェルスクリプトを初めて使用するので、単一のユーザー入力を読み取り、それを変数に保存してその変数を呼び出します。以下のとおりです。ただし、複数のユーザー入力をコンマで区切る必要がある場合は、問題が発生します。
keytool -genkey -keystore $keystore -keysize 2048 -keypass $password -storepass $password -keyalg RSA \
-dname "CN=$domain1,OU=Devteam,O=Softech,L=Chicago,ST=IL,C=US" \
-alias $domain1 -ext san=dns:domain2,domain3,domain4,domain5,domain6,domain7
ベストアンサー1
ユーザーがスクリプトにデータを提供する一般的な方法は、コマンドライン引数を使用することです。たとえば、この場合はドメイン名のリストを使用してスクリプトを呼び出すのが便利です。ユーザーはパスワードとその他のキー関連パラメータを提供する必要があるため、2つのオプションとドメインのリストを含むスクリプトを開発できます。
./script -p 'password' -k 'keystore' domain1 domain2 domain3 ...
どのユーティリティを使用しているかはわかりませんが、keytool
ユーザーが1つではなく2つ以上のドメインのリストを提供する必要があるようです。最初のドメイン名は-dname
オプションと一緒に使用されます-alias
。このオプションは、-ext
2番目のドメイン名とその値に異なるドメイン名を使用します。
次のコードは、コマンドラインオプションを解析し、keystore
変数password
に値があるかどうかを確認する慣用的な方法を使用します。その後、keytool
ユーザーが提供したデータでユーティリティを呼び出します。
#!/bin/sh
unset -v keystore password
while getopts k:p: opt; do
case $opt in
k)
keystore=$OPTARG
;;
p)
password=$OPTARG
;;
*)
echo 'Error' >&2
exit 1
esac
done
shift "$(( OPTIND - 1 ))"
if [ -z "$keystore" ] || [ -z "$password" ]; then
echo 'Missing keystore (-k) and/or password (-p)' >&2
exit 1
fi
if [ "$#" -lt 2 ]; then
echo 'Expecting at least two domain names' >&2
echo '(a main one, and one for the -ext option)' >&2
exit 1
fi
domain1=$1
shift
IFS=,
keytool -genkey \
-keystore "$keystore" \
-keysize 2048 \
-keypass "$password" \
-storepass "$password" \
-keyalg RSA \
-dname "CN=$domain1,OU=Devteam,O=Softech,L=Chicago,ST=IL,C=US" \
-alias "$domain1" \
-ext "san=dns:$*"
最初のshift
ステートメント以降の最初のドメイン名は$1
、他のドメイン名は$2
、$3
などになります。変数$1
に割り当てて呼び出します。 2回目以降は、コンマに設定して、残りのドメイン名のカンマ区切り文字列を生成できます。我々はそれをオプションのvalueに使用します。domain1
shift
shift
"$*"
IFS
-ext