http://blog.sina.com.cn/6699douding
我的新浪博客,里面有很多经典的脚本
题目环境:
**seq 20 > file,在1、3、5、9、14、18的上一行添加20个“=”。
file文件如下:
====================
1
2
====================
3
4
====================
5
6
7
8
====================
9
10
11
12
13
====================
14
15
16
17
====================
18
19
20
***需求1
在每一个“==================”之间插入序号,例如第一个等于号“============1==========”
shell 代码如下
[root@localhost shell]# cat aa.sh
#!/bin/bash
b=1
for i in `cat file`
do
if [ "$i" = "====================" ];then
echo $i | sed 's/====================/=========='$b'==========/g'
b=$(($b+1))
else
echo "$i"
fi
done
执行结果如下
==========1==========
1
2
==========2==========
3
4
==========3==========
5
6
7
8
==========4==========
9
10
11
12
13
==========5==========
14
15
16
17
==========6==========
18
19
20
思路:用for循环来遍历这个文件,如果说文件中存在字符串为“========”号就替换成“=======数字=======”
,其中数字代表是第几个“=======...”,所以我们需要一个递增的变量来记录“=====....”的个数。
***需求2
将序号1-2之间下面的数字追加到1.txt,2-3之间追加到2.txt,依次类推。
shell脚本如下
[root@localhost shell]# cat aa1.sh
#!/bin/bash
rm -rf *.txt
b=1
for i in `cat file`
do
if [ "$i" = ==========$b========== ];then
b=$(($b+1))
continue
else
echo $i >> $(($b-1)).txt
fi
done
执行结果如下
[root@localhost shell]# ls
1.txt 2.txt 3.txt 4.txt 5.txt 6.txt aa1.sh aa.sh file file1
[root@localhost shell]# cat 1.txt
1
2
[root@localhost shell]# cat 2.txt
3
4
[root@localhost shell]#
*****需求2错误总结
(1)if判断那=========$b======= 可以用单引号或者不用引号,不能用双引号,我也说不清楚是为什么,写脚本开高亮就好了
“=” 是比较字符串, -eq 一般用于逻辑运算,比较大小。
(2)一定要把b=$(($b+1))写在continue上面,如果写在下面,跳过“========$b=====”以后就直接比较下一个$i
后面的b=$(($b+1))就不看了,所以b在循环中不会被赋上值。