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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了做了一个shell的while循环,报错不能执行,能不能帮忙看看,谢谢啦相关的知识,希望对你有一定的参考价值。

参考技术A 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 ]追问

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

参考技术B 按照你的想法写的
#!/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
参考技术C != 是用来判断字符串的,
判断数字用 -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"))

本回答被提问者采纳

以上是关于做了一个shell的while循环,报错不能执行,能不能帮忙看看,谢谢啦的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本while循环语句

shell基础(五)for循环及循环终止命令

Linux Shell:Shell循环语句

Shell while循环

shell的while循环

Shell while循环详解