shell整理(39)====shell改變文本練習

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在循環中不會被賦上值。

相關文章
相關標籤/搜索