面试时我说了解shell脚本,好吧,直接让我写一个shell脚本,可是我都是在网上查着用的,所以直接写根本不会啊,果断挂了,以后学习最好就要本书系统的学习,不能只从网上找,用到啥学啥是不行的,要有个体系和系统才行。

让我用shell实现从一个文件中的第二行的数求和,其实道理很简单,但是回来实现下发现还是有很多问题。总结代码如下:

test文件如下:

1 2 3
3 4 5
8 9 10
3 4 8
8 9 11
13 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 < test
12 echo $sum
13 
14 #这样就不行
15 #sum=0
16 #cat test | while read line
17 #do
18 #tmp=$(echo $line | cut -d ' ' -f 2)
19 #let "sum+=$tmp"
20 #echo $sum             这里的sum就是对的
21 #done < test
22 #echo $sum             这里sum就是错的还是零,因为用管道又起了新进程,就改变的是子进程的sum不是父进程的,所以还是0.这就必须了解一下管道,详见博客linux学习中管道与重定向。

shell按行读取文件:

1 #!/bin/sh
cat FILENAME  |while  read LINE
do
    echo  "$LINE"
done
exit  0

 

一次读取一行,但是最前面的空格会被忽略。

 

2 #!/bin/sh
for  LINE in  ` cat FILENAME `
do
    echo  $LINE
done
exit  0

 

这个并不一定是一次读取一行,而是按照空格为分隔符。

 

3 !/bin/sh
while  read LINE
do
      echo  $LINE   
done  FILENAME

和1一样。

 

 posted on 2014-10-05 20:58  zmlctt  阅读(385)  评论(0编辑  收藏  举报