Shell脚本实训

参考资源:

  • http://blog.chinaunix.net/uid-11436705-id-107787.html

  • http://www.cnblogs.com/zhuyp1015/archive/2012/07/14/2591869.html

  • http://www.linuxidc.com/Linux/2012-02/54790.htm

  • http://www.linuxsir.org/bbs/thread23617.html

  • http://bbs.chinaunix.net/thread-438461-1-1.html

  • http://blog.sina.com.cn/s/blog_6b60096f01013zny.html

  • http://blog.csdn.net/monkey_d_meng/article/details/5924357

  • https://www.centos.bz/2012/07/shell-script-exercises/

  • http://blog.csdn.net/deansrk/article/details/6622717



1. 向多个user问好,并输出其IP

user信息存储在userInfo.txt中,内容为:

fengtian pts/1        2015-01-06 08:47 (192.168.5.179)
root     pts/0        2015-01-01 14:06 (192.168.5.40)
zhangqiang pts/2        2015-01-06 08:49 (192.168.5.167)
root     pts/4        2015-01-05 18:25 (192.168.5.40)
durui    pts/5        2015-01-06 08:51 (192.168.5.170)
languo.li pts/6        2015-01-06 09:11 (192.168.5.60)
yanyu.chen pts/7        2015-01-06 08:54 (192.168.5.71)
languo.li pts/8        2015-01-06 09:12 (192.168.5.60)
yanyu.chen pts/9        2015-01-06 08:54 (192.168.5.71)
wupeng   pts/10       2015-01-06 09:19 (192.168.5.187)
chengbin pts/12       2015-01-06 08:56 (192.168.5.63)
durui    pts/13       2015-01-06 08:57 (192.168.5.170)
languo.li pts/14       2015-01-06 09:19 (192.168.5.60)
zhangqiang pts/15       2015-01-06 09:48 (192.168.5.167)
languo.li pts/16       2015-01-06 10:11 (192.168.5.60)
lanfeng.li pts/17       2015-01-06 10:14 (192.168.5.174)

代码为:

Shell脚本实训_第1张图片


2. 向子目录下的多个文件或文件夹问好

要求:

(1)切换到目录/vars

(2)向/vars目录下的每个文件或子目录问好 

(3)统计/vars目录下共有多少个文件,并显示出来

#!/bin/bash
cd ./vars
let num=0
for I in $(ls ./*)
do
echo "hello $I"
num=$((num+1))
done
echo "the num of files is $num"
Shell脚本实训_第2张图片

Shell脚本实训_第3张图片


3.使用斐波那契数列来取出某文本文件中的某些行

userInfo.txt的内容如下:

fengtian pts/1        2015-01-07 08:34 (192.168.5.179)
root     pts/0        2015-01-01 14:06 (192.168.5.40)
yanyu.chen pts/2        2015-01-07 08:41 (192.168.5.71)
root     pts/4        2015-01-05 18:25 (192.168.5.40)
yanyu.chen pts/5        2015-01-07 08:41 (192.168.5.71)
zhangqiang pts/6        2015-01-07 08:48 (192.168.5.167)
chengbin pts/7        2015-01-07 08:53 (192.168.5.63)
languo.li pts/8        2015-01-07 08:56 (192.168.5.60)
languo.li pts/9        2015-01-07 08:56 (192.168.5.60)
durui    pts/10       2015-01-07 09:20 (192.168.5.170)
durui    pts/12       2015-01-07 09:21 (192.168.5.170)
zhangqiang pts/13       2015-01-07 09:48 (192.168.5.167)
languo.li pts/15       2015-01-07 10:20 (192.168.5.60)
lanfeng.li pts/17       2015-01-07 10:44 (192.168.5.174)

#!/bin/bash
fir=0
sec=2
temp=0
lines=$(cut -d ' ' -f1 userInfo.txt | wc -l)
while [ $temp -le $lines ]
do
temp=$((fir+sec))
fir=${sec}
sec=${temp}
echo "$temp," $(sed -n "${temp}p" userInfo.txt) >> result.txt
done



要求:

(1)取出2, 4, 6, 10, 16......等行的用户信息

(2)并将结果保存到result.txt中

Shell脚本实训_第4张图片


4. grep练习

dataFile.txt中的内容为:

Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300
Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500
Igor Chevsky:385-375-8395:3567 Populus Place, Caldwell, NJ 23875:6/18/68:23400
Norma Corder:397-857-2735:74 Pine Street, Dearborn, MI 23874:3/28/45:245700
Jennifer Cowan:548-834-2348:583 Laurel Ave., Kingsville, TX 83745:10/1/35:58900
Jon DeLoach:408-253-3122:123 Park St., San Jose, CA 04086:7/25/53:85100
Karen Evich:284-758-2857:23 Edgecliff Place, Lincoln, NB 92086:7/25/53:85100
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Karen Evich:284-758-2867:23 Edgecliff Place, Lincoln, NB 92743:11/3/35:58200
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Fred Fardbarkle:674-843-1385:20 Parak Lane, DeLuth, MN 23850:4/12/23:780900
Lori Gortz:327-832-5728:3465 Mirlo Street, Peabody, MA 34756:10/2/65:35200
Paco Gutierrez:835-365-1284:454 Easy Street, Decatur, IL 75732:2/28/53:123500
Ephram Hardy:293-259-5395:235 CarltonLane, Joliet, IL 73858:8/12/20:56700
James Ikeda:834-938-8376:23445 Aster Ave., Allentown, NJ 83745:12/1/38:45000
Barbara Kertz:385-573-8326:832 Ponce Drive, Gary, IN 83756:12/1/46:268500
Lesley Kirstin:408-456-1234:4 Harvard Square, Boston, MA 02133:4/22/62:52600
William Kopf:846-836-2837:6937 Ware Road, Milton, PA 93756:9/21/46:43500
Sir Lancelot:837-835-8257:474 Camelot Boulevard, Bath, WY 28356:5/13/69:24500
Jesse Neal:408-233-8971:45 Rose Terrace, San Francisco, CA 92303:2/3/36:25000
Zippy Pinhead:834-823-8319:2356 Bizarro Ave., Farmount, IL 84357:1/1/67:89500
Arthur Putie:923-835-8745:23 Wimp Lane, Kensington, DL 38758:8/31/69:126000
Popeye Sailor:156-454-3322:945 Bluto Street, Anywhere, USA 29358:3/19/35:22350
Jose Santiago:385-898-8357:38 Fife Way, Abilene, TX 39673:1/5/58:95600
Tommy Savage:408-724-0140:1222 Oxbow Court, Sunnyvale, CA 94087:5/19/66:34200
Yukio Takeshida:387-827-1095:13 Uno Lane, Ashville, NC 23556:7/1/29:57000
Vinh Tranh:438-910-7449:8235 Maple Street, Wilmington, VM 29085:9/23/63:68900


(1)显示所有包含San的行



(2)显示所有以J开始的人名所在的行



(3)显示所有以700结尾的行



(4)显示所有不包括834的行

Shell脚本实训_第5张图片


(5)显示所有生日在December的行



(6)显示所有电话号码的区号为284的行



(7).显示所有这样的行:它包含一个大写字母,后跟四个小写字母,一个冒号,一个空格,和一个大写字母



(8)显示姓以K或k开头的行



(9)显示工资为六位数的行,并在前面加行号

Shell脚本实训_第6张图片


(10)显示包括Lincoln或lincoln的行,并且grep对大小写不敏感.



5. sed练习

dataFile.txt与grep练习中相同

(1)把Jon的名字改成Jonathan

Shell脚本实训_第7张图片


(2)删除头三行

Shell脚本实训_第8张图片


(3)显示5-10行



(4)删除包含Lane的行

Shell脚本实训_第9张图片


(5)显示所有生日在November-December之间的行



(6)把三个星号(***)添加到以Fred开头的行

Shell脚本实训_第10张图片


(7)用JOSE HAS RETIRED取代包含Jose的行


Shell脚本实训_第11张图片

Shell脚本实训_第12张图片


 (8) 把Popeye的生日改成11/14/46



(9)删除所有空白行

Shell脚本实训_第13张图片


(10) 显示文件内容,把姓和名颠倒

Shell脚本实训_第14张图片


(11)写一个脚本

将:

  • 在第一行之前插入标题PERSONNEL FILE.
  • 删除以500结尾的工资
  • 在文件末尾添加THE END
Shell脚本实训_第15张图片

7. awk练习

dataFile中的内容为:

Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300

(1)显示所有电话号码

Shell脚本实训_第16张图片


(2)显示Dan的电话号码



(3)显示Susan的名字和电话号码



(4)显示所有以D开头的姓



(5)显示所有以一个C或E开头的名



(6)显示所有只有四个字符的名



(7)显示所有区号为916的人名



(8)显示Mike的捐款.显示每个值时都有以$开头.


(9)显示姓,其后跟一个逗号和名,如Jody,Savage

Shell脚本实训_第17张图片

(10)写一个awk的脚本,它的作用:

.显示Savage的全名和电话号码
.显示Chet的捐款
.显示所有头一个月捐款$250的人名.
注:区号本来是圆括号表示的。

Shell脚本实训_第18张图片










你可能感兴趣的:(Unix,&,linux)