Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Bourne shell在Unix中读取文件、循环和表达式_Shell_Loops_Unix_Expr - Fatal编程技术网

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

使用Bourne shell在Unix中读取文件、循环和表达式,shell,loops,unix,expr,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=`

我希望有人能帮我一把。我刚刚开始学习使用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 "

不管怎么说,我在想,也许它不是把整数当作整数,而是当作字符串。也许我没有正确设置“如果”的格式,但我不确定出了什么问题;这就是我来这里的原因。

如果您喜欢,您需要在
中添加一个空格

if [ "$p" -ge 30 ]
如果您认为

$ type [


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

if [ "$p" -ge 30 ]
    ^

哦,亲爱的,我已经在这个问题上折磨了自己一段时间,这个问题太愚蠢了,非常感谢!这与中的故障和大量其他问题是一样的。命令名需要与其参数分开,并且
[
是一个命令(它通常是一个内置的shell,但通常也有一个二进制程序,在
/bin/[
/usr/bin/[
或两者中实现或多或少相同的功能)。
$ which [
if [ "$p" -ge 30 ]
    ^