Bash 条件验证两个文件行的内容

Bash conditional validating the contents of two file lines

提问人:Tedford 提问时间:8/4/2023 最后编辑:Tedford 更新时间:8/4/2023 访问量:41

问:

在继续之前,我试图验证特定文件(来自ij的SQL输出)在两个给定的行上是否具有特定值。

我的目的是确保第 5 行包含 -----------,第 6 行包含 1

目前我正在尝试:

if sed -n '5p' $SQLFILE == "-----------" && sed -n '6p' $SQLFILE == "1";
then
print "Success\n\n"
else
printf "Failure\n\n"
exit 200
fi

上述失败,并显示“-n 附近的语法错误”

更新:

在建议更改的情况下运行(设置了 -x)

++ sed -n 5p ./testsql.txt
+ '[' ----------- == ----------- ']'
++ sed -n 6p ./testsql.txt
+ '[' '1          ' == 1 ']'
+ printf 'Initial Datasource Not Found, Or Error Running SQL Script. Exiting\n\n'

供参考:

[rvp@linuxtest UtilitiesTests]# sed -n '5p' $SQLFILE
-----------
[rvp@linuxtest UtilitiesTests]# sed -n '6p' $SQLFILE
1
bash if-statement sed 条件语句

评论

0赞 Charles Duffy 8/4/2023
顺便说一句,比===

答:

2赞 Barmar 8/4/2023 #1

您必须使用来获取命令的输出。然后使用 或 执行 中的相等性检验。$(...)sedtest[if

用于执行数字比较,而不是字符串比较。这将忽略第 6 行上的额外空格。-eq

if [ "$(sed -n '5p' "$SQLFILE")" = "-----------" ] && [ "$(sed -n '6p' "$SQLFILE")" -eq "1" ]

您还应该记住引用变量和命令替换。而可移植的相等运算符是 ,是一个 bash 扩展。===

评论

0赞 Tedford 8/4/2023
感谢您的快速和有用的回复 当我按照上面修改时,if 仍然走 else 路径
0赞 Barmar 8/4/2023
这是不可读的,请将其添加到代码块中的问题中。
0赞 Barmar 8/4/2023
第 6 行后面有一个空格。所以把它改成1== "1 "
0赞 Barmar 8/4/2023
我已将其从更改为 因此它将进行数字比较而不是字符串比较。这将忽略空格。==-eq