面试时我说了解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一样。