http://blog.sina.com.cn/6699douding
shell
個人新浪博客,裏面有不少經典的腳本bash
題目環境:ide
**seq 20 > file,在一、三、五、九、1四、18的上一行添加20個「=」。spa
file文件以下:blog
====================字符串
1get
2博客
====================it
3io
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在循環中不會被賦上值。