![](/img/trans.png)
[英]Linux shell commands not found even though their paths are listed in the PATH variable
[英]Linux Shell Scritping - Variable inside variable with commands
我正在尝试创建一个脚本来自动设置和安装Kubernetes主节点的进程。 我无法弄清楚下面的代码有什么问题,因为目标设置工人节点信息太简单了。
因此,让我分享我的代码段代码。
function create_worker()
{
echo "Generate the Kubernetes Worker Keypairs ...";
WORKER_NUMBER=3
WORKERS_FQDN=("worker1" "worker2" "worker3")
WORKERS_IP=("192.168.0.10" "192.168.0.11" "192.168.0.12")
MASTER_IP=("192.168.0.20")
K8S_SERVICE_IP=10.3.0.1
for ((i=0; i <= $WORKER_NUMBER; i++));
do
openssl genrsa -out ${WORKERS_FQDN[i]}-worker-key.pem 2048
WORKER_IP="${WORKERS_IP[i]}" openssl req -new -key "${WORKERS_FQDN[i]}"-worker-key.pem -out "${WORKERS_FQDN[i]}"-worker.csr -subj "/CN="${WORKERS_FQDN[i]}"" -config worker-openssl.cnf
WORKER_IP="${WORKERS_IP[i]}" openssl x509 -req -in "${WORKERS_FQDN[i]}"-worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out "${WORKERS_FQDN[i]}"-worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf
echo ${WORKERS_IP[i]} ${WORKERS_FQDN[i]}
sleep 2;
done
echo "Done ...";
create_adminkey
}
这是输出:
+ WORKER_IP=
+ openssl req -new -key -worker-key.pem -out -worker.csr -subj /CN= -config worker-openssl.cnf
Error Loading request extension section v3_req
139752372545168:error:220A4076:X509 V3 routines:a2i_GENERAL_NAME:bad ip address:v3_alt.c:476:value=
139752372545168:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:95:name=subjectAltName, value=@alt_names
+ WORKER_IP=
+ openssl x509 -req -in -worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out -worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf
Error Loading extension section v3_req
140642872743568:error:220A4076:X509 V3 routines:a2i_GENERAL_NAME:bad ip address:v3_alt.c:476:value=
140642872743568:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:95:name=subjectAltName, value=@alt_names
我无法读取其他变量中的变量值并无法在该变量中执行命令。
有什么办法可以帮助我吗?
谢谢
您无需说是在循环的第一次迭代还是最后一次迭代中看到该错误。 根据您对Shell脚本的了解,我假设使用后者。
如果我将您的脚本简化为:
echo "Generate the Kubernetes Worker Keypairs ..."
WORKER_NUMBER=3
WORKERS_FQDN=("worker1" "worker2" "worker3")
WORKERS_IP=("192.168.0.10" "192.168.0.11" "192.168.0.12")
MASTER_IP=("192.168.0.20")
K8S_SERVICE_IP=10.3.0.1
for ((i=0; i <= $WORKER_NUMBER; i++)); do
echo WORKER_IP="${WORKERS_IP[i]}"
done
echo "Done ...";
我看到作为输出:
Generate the Kubernetes Worker Keypairs ...
WORKER_IP=192.168.0.10
WORKER_IP=192.168.0.11
WORKER_IP=192.168.0.12
WORKER_IP=
Done ...
最后一次迭代(其中WORKER_IP=
显示任何值)是由于循环中的错误比较。 你有:
for ((i=0; i <= $WORKER_NUMBER; i++)); do
这将迭代值0、1、2和3。您的列表只有三个值,分别是${WORKERS_IP[0]}
至${WORKERS_IP[2]}
。 没有${WORKERS_IP[3]}
。 将循环更改为:
for ((i=0; i < $WORKER_NUMBER; i++)); do
...而且事情应该按预期进行。
现在,说了这一点,您可以通过执行以下操作使事情更易于管理:
for WORKER_IP in "${WORKERS_IP[@]}"; do
echo WORKER_IP="$WORKER_IP"
done
这不需要跟踪$WORKERS_IP
的长度。
我找到了解决方法,并按照下面的解决方法进行操作。
function create_worker()
{
echo "Generate the Kubernetes Worker Keypairs ...";
WORKER_NUMBER=2
WORKERS_FQDN=("worker1" "worker2" "worker3")
WORKERS_IP=("192.168.0.10" "192.168.0.11" "192.168.0.12")
MASTER_IP=("192.168.0.20")
K8S_SERVICE_IP=10.3.0.1
for ((i=0; i <= "$WORKER_NUMBER"; i++));
do
echo "${WORKERS_IP[i]}" --- "${WORKERS_FQDN[i]}";
openssl genrsa -out "${WORKERS_FQDN[i]}"-worker-key.pem 2048
WORKER_IP="${WORKERS_IP[i]}" openssl req -new -key "${WORKERS_FQDN[i]}"-worker-key.pem -out "${WORKERS_FQDN[i]}"-worker.csr -subj "/CN="${WORKERS_FQDN[i]}"" -config worker-openssl.cnf
WORKER_IP="${WORKERS_IP[i]}" openssl x509 -req -in "${WORKERS_FQDN[i]}"-worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out "${WORKERS_FQDN[i]}"-worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf
sleep 2;
done
现在一切正常。
谢谢大家
亲切的问候,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.