사용자가 입력을 완료할 때까지 여러 도메인 이름에 대한 사용자 입력을 받아야 합니다. 입력은 하나의 도메인 이름이거나 여러 도메인 이름일 수 있습니다. 그리고 도메인 이름은 쉼표로 구분해야 합니다 ,
.
도메인 이름을 다음 명령에 어떻게 전달할 수 있습니까? 도와주세요.
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
사용자가 스크립트에 데이터를 제공하는 일반적인 방법은 명령줄 인수를 사용하는 것입니다. 예를 들어, 이 경우 도메인 이름 목록을 사용하여 스크립트를 호출하는 것이 편리합니다. 사용자는 비밀번호와 기타 키 관련 매개변수를 제공해야 하므로 두 가지 옵션과 도메인 목록이 포함된 스크립트를 개발할 수 있습니다.
./script -p 'password' -k 'keystore' domain1 domain2 domain3 ...
어떤 유틸리티를 사용하고 있는지는 모르겠지만 keytool
사용자가 하나가 아닌 두 개 이상의 도메인 목록을 제공해야 하는 것 같습니다. 첫 번째 도메인 이름은 -dname
및 옵션과 함께 사용됩니다 -alias
. 이 옵션은 -ext
두 번째 도메인 이름과 해당 값에 다른 도메인 이름을 사용합니다.
다음 코드는 명령줄 옵션을 구문 분석하고 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
에 할당 하고 를 호출합니다 . 두 번째 이후에는 쉼표 로 설정하여 나머지 도메인 이름의 쉼표로 구분된 문자열을 생성 할 수 있습니다 . 우리는 그것을 옵션의 value 에 사용합니다 .domain1
shift
shift
"$*"
IFS
-ext