现在的位置: 首页 > 综合 > 正文

几个shell编程问题的回答

2013年06月12日 ⁄ 综合 ⁄ 共 1081字 ⁄ 字号 评论关闭

今天开始学习shell编程,看完基础知识点,然后在网上搜索些习题做做,看到百度空间上一个人学习shell编程过程所记下来的问题,于是对其中几个问题进行了回答。该位大哥的控件url是:http://hi.baidu.com/embeded%5Fgubi/blog/item/2f551d2488672f33c99559c3%2Ehtml

 

现在把它的问题和我的回答整理如下,请各位大侠指正。

1 result=`expr $result+$i`
result=$result+$i
result=$(($result+$i))
三者有什么不同?算术计算的话用哪个?
前面用result=0定义了变量,后面为什么不用$result=$result+$i的?

回答:1 result=`expr $result+$i` 和 result=$(($result+$i))两者的计算结果是相同的,算术计算的话最好用第二个,比较节省资源且速度较快。可以使用$()来替代反引号对。
2 result=$result+$i与另外两个是完全不同的,在shell里并没有“+”运算符(至少我还没发现,如果我错了请你告诉我),所以这条算式的运行过程是:先把$result和$i替换为相应的值,然后和“+”作为一个字符串赋给了result变量,并不会进行计算。由此你应该明白了为什么不用“$result=$result+$i”了,不要把shell和c等语言混淆了。

 

2 for i in 1 2 3 4 5
do
……
中,如果i需要1到100的值循环怎么写?for i in [ 1-100 ]又不行~

回答:for语句最好用来对某一个字符串集合进行相关运算,例如:
for file in *
do
echo $file
done
对当前目录下的文件进行遍历。
如果想要执行特定次数的话,就只能用while或者until了。
例如:循环一百次。
x=0
while [ "$x" != "100" ];
do
echo "$x < 100"
x=$(($x+1))
done
exit 0

 

3 在做100!的程序时,实现乘法出错result=$(($result*$i))不行

回答:不是不行,而是100!越往后的值越大,shell变量存不了那么大的值。能够计算到20!就很不错了,再往后必须使用大数算法

 

4 bash shell中有-eq  -le  -ge为什么也有=  <=  >等比较符号?什么差别?

回答:差别很大,-eq   -le   -ge这些符号只用于test或[命令,而<,<=这些符号用于expr命令。这些应该是专属于特定命令的,而不是shell的比较运算符。

 

 

抱歉!评论已关闭.