Linux下shell程序设计_第1页
Linux下shell程序设计_第2页
Linux下shell程序设计_第3页
Linux下shell程序设计_第4页
Linux下shell程序设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux 下的 Shell 程序设计Linux 下的 Shell 程序设计 1一引言 21.1编写目的: 21.2定义: 23参考资料: 3二任务的描述 32.1目标: 32.2 功能描述: 32.3运行环境: 32.4条件与限制: 3三任务设计 43.1整体设计: 43.2.详细设计: 53.2.1. Menu 模块: 53.2.2. Add 模块 63.2.3 Delete 模块 9四实现过程 104.1问题 1 104.2问题 2 11五程序运行 115.1程序运行的过程: 115.1.1.执行效果截图 115.1.2. 输入错误截图 125.1.3.选择菜单 1,运行截图 125.1

2、.4.选择菜单 2,运行截图 125.1.5 选择菜单 3,运行截图 125.1.6 选择菜单 5,运行截图 125.1.7 选择菜单 6,运行截图 135.1.8 选择菜单 7,运行截图 13六、感想认识 13七程序代码 147.1.Menu 模块 147.2. Add 模块 157.3. Delete 模块 20引言1.1 编写目的:通过本课程设计, 使学生巩固 Linux 和嵌入式系统的的基本概念、 原理和技术, 学会在 Linux 系统下完成 Shell 程序设计。1.2 定义:1) grepLinux 系统中 grep 命令是一种强大的文本搜索工具, 它能使用正则表达式搜索文本, 并

3、 把匹 配的行打印出来。 grep 全称是 Global Regular Expression Print ,表示全局正则表达式版 本,它的使用权限是所有用户。2) sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按 ASCII 码 值进行比较,最后将他们按升序输出。3) rmrm 名称源自英文单词 remove 的缩写,用于删除文件系统中的文件、目录、设备文件、 符号链接等对象。准确地说, rm 移除的指向特定对象的引用。在文件系统中,这些特定的 对象可能有多个引用(例如,两个不同的文件名可能指向相同的文件) , 只有在一个对象不 再有任何引用, 并且没有任何程序还

4、拥有这个文件的有效句柄的时候, 这个文件才会被删除。4) cat显示或者把多个文本文件连接起来。 cat 是 concatenate 的简写,类似于 dos 下面的 type 命令。5) moremore命令,功能类似cat。more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b键就会往回(back)一页显示,而且还 有搜寻字串的功能。 more 命令从前向后读取文件,因此在启动时就加载整个文件。6) awkawk 是一个数字处理工具。相比于 sed 常常作用于一整行的处理, awk 则比较倾向于将 一行分为数个 “字段” 来处理。 运行效

5、率高, 而且代码简单, 对格式化的文本处理能力超强。 awk是” Aho Weiberger and Kernighan ”三个姓的第一个字母缩写。7) sedsed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓 冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区 的内容送往屏幕。接着处理下一行, 这样不断重复,直到文件末尾。文件内容并没有 改变, 除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。3参考资料:(1) 陈祥琳 Linux Shell 脚本编程从入门到精通 ISBN:

6、9787302347927 清华大学出版社, 2014(2.) 孙琼嵌入式 Linux C 语言应用程序设计 ISBN: 9787115342799 人民邮电出版社 2014 (3)秦攀科 Linux C 程序设计实例详解与上机实验ISBN : 9787512106680 北京交通大学出版社 2011任务的描述2.1 目标:(1) 按要求设计 Shell 程序,实现用户管理的菜单,(2)用 Shell 编程,实现 menu 主菜单,要求菜单中包含用户的显示,添加,删除等功能。2.2 功能描述:在主 Shell 脚本文件里要有一个多操作选项的菜单(即主菜单)以便用户从中选择。在 不同任务的中,这

7、些操作能自动实现以下功能:在屏幕上显示当前所有用户的记录 在屏幕上显示当前所有用户(经过格式化和排序的)的记录 只在屏幕上显示用户名和用户 ID 只在屏幕上显示(经过格式化和排序的)用户名和用户 ID 查询并显示特定用户的记录往 passwd 文件里增加新的用户记录从 passwd 文件里删除某个用户记录2.3 运行环境:硬件:装有 Windows 操作系统的计算机 软件: Vmware 和 Linux 下的 C 语言开发环境2.4 条件与限制:三任务设计3.1 整体设计:在目录下有三个文件分别为menu, add, delete其中:menu文件中的程序完成1,2,3,4,5功能;另外写一个

8、add脚本文件和delete脚本文件分别实现选项6和7。另外还有一个系统自带的passwd文件存放用户记录。当用户做了选择且所选的操作完成之后,可以再次显示主菜单 以供用户做下一步选择。用while循环和case条件语句配合来完成此操作。程序主要有三个最重要的部分,1是主界面2是添加用户3是删除用户。下面是它们的流程图。王菜单:主菜单,T-你的选择Delete 模块:主紊d是否避皱删陰”丿jft-A delete 思而* 0 “1输入ID是否存枠二是否删陳二 T2进入主英单32详细设计:3.2.1. Menu 模块:(menu文件中的程序完成1,2,3,4,5功能)#! /bin/sh-rec

9、ord_file=/etc/passwd # 三个文件变量add_file=adddelete_file=detelewhile truedoclearecho 用户信息主菜单”echo=echo 1、打印当前所有记录”echo 2、打印当前所有记录(格式化后的)”echo 3、打印用户名和用户IDecho 4、打印(格式化了的)用户名和用户IDecho 5、查询特定记录echo 6、增加新记录”echo 7、删除记录echo Q-退出”echo -n 你的选择是:read choicecase $choice in #通过case进入相应的入口1)cat $record_file | tr

10、:;#显示passwd中的内容,同时将每行的:替换成空格2)#awk -F : ($3=0 | $3 499 & $3 passwd;echo $name $pwd1 $id $gid $fullname /home/$name /bin/$she echo -n 再增加一个吗 ?(Y/N)read choiceif test $choice = Y -o $choice = y thencontinueexitelseif test $choice = N -o $choice = nthensh menuexit fi fiDone3.2.3 Delete 模块ID。(以下也是删除模块的关

11、键代码,部分有删除)删除模块刚开始的查找用的是用户 while truedoecho -n 输入用户 ID:read uid if test -z $uidthen echo 没有输入 ! continuefiif test $uid = N -o $uid = nthen sh menu exitfiif test $uid -ge 500 -a $uid -le 60000 thenn ame=awk -F: $3=$uid $record_file | cut -d : -f 1 #声明一个变量 n ame,将符合的第一列复制给 nameif (! test -z $n ame )the

12、 nawk -F: $3=$uid $record_fileecho -n 确认删除? Y或 N :read anif (test $an = Y -o $an = y)the nINFO=$(grep $uid $record_file)#rmdir /home/$ nameif ! -z $INFO ; the nuserdel -r $n ame #这句话是删除fiecho 记录删除”echo -n 再删除一个? Y或N :(下面代码省略了)四实现过程4.1 .问题1(1)问题描述:删除模块中看着很正常,确认删除输入y后,显示已经确认删除,但是是假象,在主界面输入 1显示用户依然存在。(

13、2) 解 决 办 法: 原 来 的 代 码 是if 0 lest l $namc )thenawk -F: $3=,$iiiiil $ record fileecho -n “确认删除? V或N?read an if (test San = YM -o $im =li冊del -r Sname、echo M id录删除 fcinr-n 再删除-个? 或N read an2修改之后的是if (! Lcsl z 5name )awk -F: $3=*$ui(r $ record fileecho -n 确认删除? Y或N : read uniecho 记录if (testINFO=$(grep $

14、uid Srecord file) rmdir /homc/$namc 、 if ! -z,$INFO,F : then 1 userdcl -r $name #这句话童删除echo -n 再删除一个? Y或N :之前少了一部分。4.2 .问题2(1)问题描述:主界面以为是用的汉字,显示的时候老是出现乱码(2) 解决办法:这个有好几个方法,1把汉字全有英文或拼音代替2在运行界面上点击 端-字符编码-Unicode.五程序运行5.1 .程序运行的过程:5.1.1.执行效果截图丈FKE) 编辑 査粗戈)终端转到(Q 帮助01)用户侑息11束单1、打印当前所有记录2、打印当前所冇记录格式化后的)3、

15、打印用户名和用户ID4、打印(格式化了的用户名和用户105、査询特定记录氣增加新记录7 1N除记录Q-退出怖的选择是:15.12输入错误截图你的选择是:o无效的代玛按回车锥泄续。,|5.1.3.选择菜单1,运行截图祢的选彈是:iroot x 0 0 root /root /b in/bashb in x 1 1 b in /b in /sb in/nc log in da e non x 2 2 daeimn /sb in /sb in/i)o login adm x 3 4 adm /va r/adm / sb in7no log n 按回车键继续.5.1.4.选择菜单2,运行截图a dmX

16、34adiinb inX11biitdaermnX22dacnunroo tX00roo t你的选择是凹按冋车储樂置,一/var/adrn/bin/no Jog in/b in /sb in/nolog m/sb in /sb in/no log in/roo I /bm/bash5.1.5选择菜单3,运行截图你的选择址:刍TOQI.0bill Jdaenun h2adnx3摄冋车程離续 |5.1.6选择菜单5,运行截图你的选释圧;5愉入关键字:rootroo L : x : 0:0 : rdo t :/rodl : /b m/ba sh 按冋车健继续口口5.1.7选择菜单6,运行截图文杵迥

17、編辑 杳若理 I T; 转到一呼旦;用户匪孫单输入靳用户的貝体悟况 用户名:yw密码:确认密码:密码不一效!请匝新输入!密码:确认密码:用 fJD: 609组 ID 609-一冷录:y w登录 she I I : ba E h用户全名;y钏主目录:y wChng ing passrd for user yw.pus$; a I) au ih亡Ioken; upda Led successfu I y 4 yw创建成功Iyw 10】01竝 609 609 yw /hom?/yw /b jn/bash冉增加牛吗?(Y/N) A5.1.8选择菜单7,运行截图文件 编辑査看(里终端CD 转到( 删除用

18、岚录一愉入用户I&609ywjx:fi05:609:: /honv/yw: /b in/ba sh确认删除? 或N :y记录删讎再删除一牛? Y或N :六、感想认识课设开始时,我看了一下课程设计任务说明书,然后选择了第二个题目, 第二个题目以前做做过一部分,然后我又百度了一下希望能在百度上找到代码和步骤,果然网上还是有的。开始课设之后我按照网上找来的做了一遍,但是没有成功,它有好几个错误,其中一 个就是我上面提到的第一个问题,研究了好久,时间本来就短,心里很焦急。询问了几个同 学,他们都跟我做的不是同一个题目,最后找到会做的只能等到他做完才能教我。事实上我也从做第二个题目的过程中学到了一些关于

19、 Linux 的基础知识,老师给了 Linux 下 shell 命 令的一些基本操作, 然后又按照步骤一步一步来, 学会了一些 Linux 操作系统中的基本命令, 熟悉了 ubuntu 操作系统的文件系统以及其使用细节。最后一周,基本上是做完了,又代码更改了一些,虽然代码是从网上下载的,但是通 过对其的修改,还是让我懂得了一些 shell 编程知识,通过此次课设,我学会了一些 Shell 主要命令的使用方法,熟悉了 Linux 操作系统的 操作环境, 了解了 Shell 编程的基本特点, 等等。 感觉这几周学到的东西比以前几个月都多。 基本完成课设任务,达到了课设目的。程序代码7.1.Menu

20、 模块#! /bin/sh-record_file=/etc/passwd # 三个文件变量 add_file=adddelete_file=detelewhile truedoclear用户信息主菜单echo echo =echo 1、打印当前所有记录echo 2 、打印当前所有记录(格式化后的)echo 3 、打印用户名和用户 IDecho 4 、打印 (格式化了的 )用户名和用户IDecho 5 、查询特定记录echo 6 、增加新记录echo 7 、删除记录echo Q- 退出echo -n 你的选择是 :read choicecase $choice in #通过 case 进入相应

21、的入口1)cat $record_file | tr : ;#显示 passwd 中的内容,同时将每行的:替换成空格2)#awk -F : ($3=0 | $3 499 & $3 passwd;echo $name $pwd1 $id $gid $fullname /home/$name /bin/$sheecho -n 再增加一个吗 ?(Y/N)read choiceif test $choice = Y -o $choice = ythencontinueexitelse if test $choice = N -o $choice = n thensh menuexitfifi done7.3. Delete 模块#! /bin/sh- record_file=/etc/passwd clear echo 删除用户记录 while true doecho -n 输入用户 ID:read uidif

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论