使用 Bourne shell 在 Unix 中进行文件读取、循环和表达式



我希望有人能帮我一把。我刚刚开始使用Bourne shell在Unix中学习shell脚本,我遇到了一个问题。

我正在尝试制作一个脚本,该脚本获取具有一系列数字的文件,并使用while循环读取该文件并检查该数字是否大于30。如果是,它将递增一个计数器。最后,它呼应了大于 30 的数字的次数。

该文件看起来与此类似,但更大。

0107
0027
0110

这是我的代码

#!/bin/sh
count=0
while read p;do
if ["$p" -ge 30 ]
then
 count=`expr $count + 1`
fi
done < $1
echo " has logged in for more than 30 minutes $count times "

最后,我希望这说您登录了 2 次,但相反,我为文件中的每个数字收到此错误。下面是一个示例。

./scriptname: 4: ./scriptname: [0107: not found

无论如何,我在想也许它不是将整数视为整数,而是将其视为字符串。也许我没有正确格式化我的"如果",但我不确定出了什么问题;这就是我来到这里的原因。

您需要在if中添加一个空格,例如

if [ "$p" -ge 30 ]

这样做的原因应该很清楚,如果你

$ type [

$ which [

在左方括号后需要空格,例如:

if [ "$p" -ge 30 ]
    ^

相关内容

  • 没有找到相关文章

最新更新