面试时我说了解shell脚本,好吧,直接让我写一个shell脚本,可是我都是在网上查着用的,所以直接写根本不会啊,果断挂了,以后学习最好就要本书系统的学习,不能只从网上找,用到啥学啥是不行的,要有个体系和系统才行。
让我用shell实现从一个文件中的第二行的数求和,其实道理很简单,但是回来实现下发现还是有很多问题。总结代码如下:
test文件如下:
1 2 33 4 58 9 103 4 88 9 1113 11 14
第二行求和实现代码:
1 #!/bin/bash 2 sum=0 3 while read line 4 do 5 tmp=$(echo $line | cut -d ' ' -f 2) 6 #let sum+=$tmp # let "sum+=$tmp" #也可以,有没有引号都行,这里写了几种加法 7 #((sum=sum+$tmp)) 8 #sum=$(($sum+$tmp)) #可以不空格 9 #sum=$[$sum+$tmp]10 sum=`expr $sum + $tmp` #这里必须隔着空格11 done < test12 echo $sum13 14 #这样就不行15 #sum=016 #cat test | while read line17 #do18 #tmp=$(echo $line | cut -d ' ' -f 2)19 #let "sum+=$tmp"20 #echo $sum 这里的sum就是对的21 #done < test22 #echo $sum 这里sum就是错的还是零,因为用管道又起了新进程,就改变的是子进程的sum不是父进程的,所以还是0.这就必须了解一下管道,详见博客linux学习中管道与重定向。
shell按行读取文件:
1 #!/bin/shcat FILENAME |while read LINEdo echo "$LINE"doneexit 0
一次读取一行,但是最前面的空格会被忽略。
2 #!/bin/shfor LINE in ` cat FILENAME ` do echo $LINE doneexit 0
这个并不一定是一次读取一行,而是按照空格为分隔符。
3 !/bin/shwhile read LINEdo echo $LINE done < FILENAME
和1一样。