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

下载本文档

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

文档简介

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问题1104.2问题211五程序运行115.1程序运行的过程:115.1.1.执行效果截图115.1.2.输入错误截图125.1.3.选择菜单1,运行截图125.1.4.选择菜单2,运行截图125.1.5选择菜单3,运行截图125.1.6

2、 选择菜单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)grep Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户

3、。 2)sort 将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。3)rm rm 名称源自英文单词remove的缩写,用于删除文件系统中的文件、目录、设备文件、符号链接等对象。准确地说,rm移除的指向特定对象的引用。在文件系统中,这些特定的对象可能有多个引用(例如,两个不同的文件名可能指向相同的文件), 只有在一个对象不再有任何引用,并且没有任何程序还拥有这个文件的有效句柄的时候,这个文件才会被删除。4)cat 显示或者把多个文本文件连接起来。cat是concatenate的简写,类似于dos下面的type命令。5)more m

4、ore命令,功能类似cat。more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功能。more命令从前向后读取文件,因此在启动时就加载整个文件。6)awk awk是一个数字处理工具。相比于sed常常作用于一整行的处理,awk则比较倾向于将一行分为数个“字段”来处理。运行效率高,而且代码简单,对格式化的文本处理能力超强。awk 是”Aho Weiberger and Kernighan”三个姓的第一个字母缩写。7)sed sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在

5、临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。3参考资料:(1) 陈祥琳 Linux Shell脚本编程从入门到精通ISBN: 27清华大学出版社,2014(2.)孙琼嵌入式Linux C语言应用程序设计ISBN: 99 人民邮电出版社 2014(3)秦攀科 Linux C程序设计实例详解与上机实验ISBN:80北京交通大学出版社2011二任务的描述2.1目标:(1)按要

6、求设计Shell程序,实现用户管理的菜单,(2)用Shell编程,实现menu主菜单,要求菜单中包含用户的显示,添加,删除等功能。2.2功能描述: 在主Shell脚本文件里要有一个多操作选项的菜单(即主菜单)以便用户从中选择。在不同任务的中,这些操作能自动实现以下功能:在屏幕上显示当前所有用户的记录在屏幕上显示当前所有用户(经过格式化和排序的)的记录只在屏幕上显示用户名和用户ID只在屏幕上显示(经过格式化和排序的)用户名和用户ID查询并显示特定用户的记录往passwd文件里增加新的用户记录从passwd文件里删除某个用户记录 2.3运行环境: 硬件:装有Windows操作系统的计算机软件:Vm

7、ware和Linux下的C语言开发环境2.4条件与限制:三任务设计3.1整体设计:在目录下有三个文件分别为menu,add,delete其中: menu文件中的程序完成1,2,3,4,5功能;另外写一个add脚本文件和delete脚本文件分别实现选项6和7。另外还有一个系统自带的passwd文件存放用户记录。当用户做了选择且所选的操作完成之后,可以再次显示主菜单以供用户做下一步选择。用while循环和case条件语句配合来完成此操作。程序主要有三个最重要的部分,1是主界面2是添加用户3是删除用户。下面是它们的流程图。主菜单:Add模块:Delete模块:3.2.详细设计: 3.2.1.Menu

8、模块:(menu文件中的程序完成1,2,3,4,5功能) #! /bin/sh-record_file=/etc/passwd #三个文件变量add_file=adddelete_file=detelewhile truedo clear echo 用户信息主菜单 echo = echo 1、打印当前所有记录 echo 2、打印当前所有记录(格式化后的) echo 3、打印用户名和用户ID echo 4、打印(格式化了的)用户名和用户ID echo 5、查询特定记录 echo 6、增加新记录 echo 7、删除记录 echo Q-退出 echo -n 你的选择是: read choice ca

9、se $choice in #通过case进入相应的入口 1)cat $record_file | tr : ; #显示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 choice if test $choice = Y -o $choice = y then continue exit else if test $choice = N -o $c

10、hoice = n then sh menu exit fi fi Done3.2.3 Delete模块(以下也是删除模块的关键代码,部分有删除)删除模块刚开始的查找用的是用户ID。while truedo echo -n 输入用户ID: read uid if test -z $uid then echo 没有输入! continue fi if test $uid = N -o $uid = n then sh menu exit fi if test $uid -ge 500 -a $uid -le 60000 then name=awk -F: $3=$uid $record_file

11、 | cut -d : -f 1 #声明一个变量name,将符合的第一列复制给name if (! test -z $name ) then awk -F: $3=$uid $record_file echo -n 确认删除? Y 或 N : read an if (test $an = Y -o $an = y) then INFO=$(grep $uid $record_file)#rmdir /home/$name if ! -z $INFO ; thenuserdel -r $name #这句话是删除 fi echo 记录删除 echo -n 再删除一个? Y 或 N :(下面代码省略

12、了) 四实现过程4.1问题1 (1)问题描述:删除模块中看着很正常,确认删除输入y后,显示已经确认删除,但是是假象,在主界面输入1显示用户依然存在。 (2)解决办法:原来的代码是修改之后的是之前少了一部分。4.2问题2 (1)问题描述:主界面以为是用的汉字,显示的时候老是出现乱码 (2)解决办法:这个有好几个方法,1.把汉字全有英文或拼音代替2.在运行界面上点击 终端-字符编码-Unicode.五程序运行 5.1程序运行的过程:5.1.1.执行效果截图5.1.2.输入错误截图5.1.3.选择菜单1,运行截图5.1.4.选择菜单2,运行截图5.1.5选择菜单3,运行截图5.1.6 选择菜单5,运

13、行截图5.1.7 选择菜单6,运行截图5.1.8 选择菜单7,运行截图六、感想认识 课设开始时,我看了一下课程设计任务说明书,然后选择了第二个题目,第二个题目以前做做过一部分,然后我又百度了一下希望能在百度上找到代码和步骤,果然网上还是有的。 开始课设之后我按照网上找来的做了一遍,但是没有成功,它有好几个错误,其中一个就是我上面提到的第一个问题,研究了好久,时间本来就短,心里很焦急。询问了几个同学,他们都跟我做的不是同一个题目,最后找到会做的只能等到他做完才能教我。事实上我也从做第二个题目的过程中学到了一些关于Linux的基础知识,老师给了Linux下shell命令的一些基本操作,然后又按照步

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

15、le=detelewhile truedo clear echo 用户信息主菜单 echo = echo 1、打印当前所有记录 echo 2、打印当前所有记录(格式化后的) echo 3、打印用户名和用户ID echo 4、打印(格式化了的)用户名和用户ID echo 5、查询特定记录 echo 6、增加新记录 echo 7、删除记录 echo Q-退出 echo -n 你的选择是: read choice case $choice in #通过case进入相应的入口 1)cat $record_file | tr : ; #显示passwd中的内容,同时将每行的:替换成空格 2) #awk

16、-F : ($3=0 | $3 499 & $3 passwd; echo $name $pwd1 $id $gid $fullname /home/$name /bin/$she echo -n 再增加一个吗?(Y/N) read choice if test $choice = Y -o $choice = y then continue exit else if test $choice = N -o $choice = n then sh menu exit fi fi done7.3.Delete模块#! /bin/sh-record_file=/etc/passwdclearech

17、o 删除用户记录while truedo echo -n 输入用户ID: read uid if test -z $uid then echo 没有输入! continue fi if test $uid = N -o $uid = n then sh menu exit fi if test $uid -ge 500 -a $uid -le 60000 then name=awk -F: $3=$uid $record_file | cut -d : -f 1 #声明一个变量name,将符合的第一列复制给name if (! test -z $name ) then awk -F: $3=$uid $record_file echo -n 确认删除? Y 或 N : read an if (test $an = Y -o $an = y) then INFO=$(grep $uid $record_file)#rmdir /home/$name if ! -z $INFO ; thenuserdel -r $name #这句话是删除 fi echo 记录删除 echo -n 再删除一个?

温馨提示

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

评论

0/150

提交评论