String 如何将从文件中读取的数字从str转换为int?

String 如何将从文件中读取的数字从str转换为int?,string,bash,shell,integer,String,Bash,Shell,Integer,我使用bash,我必须读取一个包含许多行的文件 每行由一个数字组成。然后,对于每一行(数字),我必须检查值是否大于80 这是我的问题,无论我尝试什么,我总是得到: >integer expression expected 在if条件之后。这是因为我用来输入行值的变量是字符串 这是我的原始文件 [root@michelep_centos2 ~]# cat temp1 0 0 0 98 0 0 79 0 81 在bash脚本中,我有 ##!/bin/bash file=

我使用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"
这里,if条件返回“预期的整数表达式”

我也用过echo

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

第一个操作:
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
尝试以下-干净的纯Bash代码:

#! /bin/bash -p

file=/root/temp1

while read -r line ; do
    (( line > 80 )) && echo "$line > 80"
done <"$file"
!/bin/bash-p
文件=/root/temp1
当读取-r行时;执行
((行>80))&回显“$line>80”
完成尝试此-干净的纯Bash代码:

#! /bin/bash -p

file=/root/temp1

while read -r line ; do
    (( line > 80 )) && echo "$line > 80"
done <"$file"
!/bin/bash-p
文件=/root/temp1
当读取-r行时;执行
((行>80))&回显“$line>80”

我得到了这个错误:“)语法错误:无效的算术运算符(错误标记为“@MichelePardini,搜索错误消息会导致错误。我怀疑答案适用于您的情况。另请参阅的“询问问题代码之前”部分中的第一条建议。我得到了这个错误:”)语法错误:无效的算术运算符(错误标记为“@MichelePardini,通过谷歌搜索错误消息会导致错误。我怀疑答案适用于您的情况。另外,请参阅.awk中“询问问题代码之前”部分的第一条建议。该建议有效,但不符合我的要求。而对于脚本,则为“如果[$line=~^[0-9]+$]”;然后”不会通过。所以什么都不会发生,都是字符串。顺便说一句,在文件中我没有空格,只有数字,每行一个。我开始认为问题出在文件中。awk可以工作,但不符合我的要求。而对于脚本,这是“如果[[$line=~^[0-9]+$];然后”不会通过。所以什么都不会发生,都是字符串。顺便说一句,在文件中我没有空格,只有数字,每行一个。我开始认为问题出在文件中。您应该尝试的第一个操作是
dos2unix-f inputfile
,然后尝试以下解决方案。您应该尝试的第一个操作是
dos2unix-f inputfile
,然后尝试以下方法w解决方案。