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

时间:2015-03-13 04:54:06

标签: shell loops unix expr

我希望有人能帮助我。我刚刚开始使用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

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

2 个答案:

答案 0 :(得分:0)

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

if [ "$p" -ge 30 ]

如果您

,原因应该清楚
$ type [

$ which [

答案 1 :(得分:0)

打开方括号后需要空格,如:

if [ "$p" -ge 30 ]
    ^