做了一个shell的while循环,报错不能执行,能不能帮忙看看,谢谢啦

如题所述

第1个回答  2011-11-01
while [ “$i” != "100" ] 这句出错的本质是数据类型与运算符不匹配,不管你上不上双引号,在这里shell都把他俩当做数字对待了。数字间比较使用的是lt(lower than),le(lower or equal) ,eq (aqual) gt(greater than),ge(greater or equal), ne(not equal)这几个操作符,而==,!= 这两个操作符是用来比较两个字符串的,用它来操作两个数字,自然会出错
可以改成 while [ “$i” -gt 100 ]追问

改成了现在的样子,还是报错,郁闷,纠结啊,帮忙看看吧,谢谢啦

第2个回答  2011-11-01
按照你的想法写的
#!/bin/bash
s=0
i=0
while [ $i != 100 ]
do
i=$[$i+1]
s=$[$i+$s]
done
echo $s

我的想法写的
#!/bin/bash
j=0
for ((i=1;i<=100;i++))
do
j=$[$i+$j]
done
echo $j
第3个回答  2011-11-01
!= 是用来判断字符串的,
判断数字用 -ne追问

改成了现在的样子,还是不行,帮忙看一下吧

追答

呵呵,你之前是C/C++程序员吧,代码规范还不错,可惜shell中不适用。
shell脚本中的变量赋值,=号两边不能有空格哦。
#!/bin/bash
s=0
i=0
while (( i != 100 ))
do
((i++))
s=$((i+s))
done
echo $s

追问

谢谢夸奖啊,之前我是做php的,我有点不太明白了,不是说 “!=”是操作字符串的吗?这里怎么用来操作数值了?并且我把它改成 -ne 就会报错

追答

这就要从括号讲起了。
(( ))是用于计算一个算术表达式的值。 里面就可以直接用 !=了
[ ] 和test, /usr/bin/test,/usr/bin/[一样,是等价命令。
整数比较
-eq 等于 if [ "$a" -eq "$b" ]
-ne 不等于 if [ "$a" -ne "$b" ]
-gt 大于 if [ "$a" -gt "$b" ]
-ge 大于等于 if [ "$a" -ge "$b" ]
-lt 小于 if [ "$a" -lt "$b" ]
大于(在双括号中使用) (("$a" > "$b"))
>= 大于等于(在双括号中使用) (("$a" >= "$b"))

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网