我使用 bash,我必须读取一个包含多行的文件
每行由一个数字组成。然后,对于每一行(数字),我必须检查值是否 > 80。
这是我的问题,无论我尝试什么,我总是得到:
>integer expression expected
在 if 条件之后。那是因为我用来放置行值的变量是一个字符串。
这是我的原始文件
[root@michelep_centos2 ~]# cat temp1
0
0
0
98
0
0
79
0
81
在 bash 脚本中,我有
##!/bin/bash
file=/root/temp1
while IFS= read -r line
do
if [ 'expr $line /1' -gt 80 ]
then echo "hit>80"
fi
done <"$file"
这里 expr 返回错误,因为 $line 是一个字符串。我试过使用另一个变量
val=$(($line + 0))
if [ $val -gt 80 ]
这里的 if 条件返回“预期的整数表达式”
我也用过回声
val=$(echo "$((line /1))")
if [ $val -gt 80 ]
我得到
语法错误:无效的算术运算符(错误标记是 ...
来自 echo 命令,当然还有 if 条件返回
预期的整数表达式
第一个动作: dos2unix -f inputfile
第二个动作:
从输入文件可以看出它包含空行,这将导致if
比较失败。您可以在检查之上进行额外检查,-gt 80
以确保在传递变量之前$line
使用它不为空,if [ ! -z $line ]
或者更好的是您可以进行检查以确保该行是一个整数,或者可能同时使用 AND。
例子:
while read line;
do
if [[ $line =~ ^[0-9]+$ ]];then
if [ $line -gt 80 ];then
echo "$line is greater then 80"
fi
fi
done <input_file
或者,如果您不想放空 check( [ ! -z $line ]
) ,
此外,这可以使用其他工具来完成,例如awk
在一行中,但这可能符合也可能不符合您的要求。
awk 'NF && $0>80{print $0 ,"is greater then 80"}' inputfile
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句