我正在尝试编写一个简单的bash脚本,该脚本将检查并比较某些站点中的SSL证书序列号(使用openssl s_client),这些站点名为SANS.txt。这是一个简单的文件,其中一些地址以与此示例类似的方式列出:
example.com
stackoverflow.com
比较的序列是静态的,并在脚本中设置为变量。
但是在读取/比较SANS.txt的第一行后脚本总是停止。我一直试图通过各种帖子和示例以及其他论坛抓取数小时,但无法修复我的脚本。我怀疑我的问题与在while循环中管道并且管道启动子shell ...
有关这是我的简短剧本:
#!/bin/bash
while read -r SAN
do
COMPARED_SERIAL="serial=0E64C5FBC236ADE14B172AEB41C78CB0"
printf "\\n"
echo $COMPARED_SERIAL
ONLINE_SERIAL=`openssl s_client -servername $SAN -connect $SAN:443 2>/dev/null | openssl x509 -noout -serial`
if [[ "$ONLINE_SERIAL" == "$COMPARED_SERIAL" ]]
then echo $SAN $COMPARED_SERIAL "matches with" $ONLINE_SERIAL
else echo $SAN $COMPARED_SERIAL "does NOT match with" $ONLINE_SERIAL
fi
done < SANS.txt
我正在运行bash,版本4.3.48。
答案 0 :(得分:1)
似乎文件末尾缺少最终\n
,为了解决而不是检查读取退出状态,您还可以检查san
变量是否为空。
while read -r san || [[ $san ]]; do
由于惯例,将变量名称更改为小写。