当从文件中读取变量时,循环在第一行后停止

时间:2018-03-10 08:01:54

标签: bash file loops variables

我正在尝试编写一个简单的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。

1 个答案:

答案 0 :(得分:1)

似乎文件末尾缺少最终\n,为了解决而不是检查读取退出状态,您还可以检查san变量是否为空。

while read -r san || [[ $san ]]; do

由于惯例,将变量名称更改为小写。