シェルスクリプトでカンマ区切りの行に複数のユーザー入力を追加する

シェルスクリプトでカンマ区切りの行に複数のユーザー入力を追加する

ユーザーが入力を完了するまで、複数のドメイン名に対するユーザー入力を受け取る必要があります。入力は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。このオプションは、-ext2番目のドメイン名とその値に異なるドメイン名を使用します。

次のコードは、コマンドラインオプションを解析し、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に使用します。domain1shiftshift"$*"IFS-ext

おすすめ記事