在 bash 脚本中使用字符串参数失败

问题描述 投票:0回答:1

我需要创建一些证书,并想为此编写一个小的 bash 脚本。

首先,我在创建自己的 bash 脚本方面没有太多经验。

我想将计算机名称和密码等最重要的值作为参数传递。不幸的是我收到错误:

keytool 错误:java.io.IoException:AVA 格式不正确

该错误表明命令中的字符串未正确解释。 我认为问题是我没有正确使用字符串,但我不明白到底出了什么问题。

如果我在终端中输入这样的命令,它就可以正常工作

#!/bin/bash

echo "$1" # servername
echo "$2" # domain
echo "$3" # password
echo

keytool -noprompt -keystore $1.$2.truststore.jks -alias CARoot -import -file ca.cert -storetype jks -storepass $3 -keypass $3

keytool -genkey -noprompt -keyalg RSA -storetype pkcs12 -alias $1.$2 -dname $1'.'$2',O=COMPANY,OU=COMPANY,L=NY,ST=NY,C=us' \
      -ext 'SAN=DNS:example1.com,DNS:example2.com'
      -keystore $1.$2'.keystore2.jks' -storepass $3 -keypass $3

你能告诉我我做错了什么吗?

java linux bash shell keytool
1个回答
0
投票

这是处理空格和连接字符串的方式。在脚本中传递参数时,您需要正确引用变量来处理值包含空格的情况。

尝试修改脚本的版本:

#!/bin/bash
server_name="$1"
domain="$2"
password="$3"
echo "$server_name"
echo "$domain"
echo "$password"
keytool -noprompt -keystore "$server_name.$domain.truststore.jks" -alias CARoot -import -file ca.cert -storetype jks -storepass "$password" -keypass "$password"
keytool -genkey -noprompt -keyalg RSA -storetype pkcs12 -alias "$server_name.$domain" -dname "$server_name.$domain,O=COMPANY,OU=COMPANY,L=NY,ST=NY,C=us" \
      -ext "SAN=DNS:example1.com,DNS:example2.com" -keystore "$server_name.$domain.keystore2.jks" -storepass "$password" -keypass "$password"

此脚本正确引用变量并确保正确处理带空格的文件名和值。一定要尝试一下!

© www.soinside.com 2019 - 2024. All rights reserved.