四川大学 操作系统原理 第二次 实验报告 shell编程
- 格式:doc
- 大小:389.00 KB
- 文档页数:5
Shell编程实验报告【实验目的】1、了解和熟悉创建并使用脚本的步骤。
2、熟悉bash的控制结构。
3、学会简单的shell编程。
【实验内容】1、创建一个简单的列目录和日期的shell脚本并运行之。
步骤:⑴输入下列命令,创建一个新文件:cat>new_script⑵输入下列行:echo“Yourfilesare”lsecho“todayis”date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:catnew_script⑷运行脚本,输入它的文件名:new_script该脚本不运行。
⑸输入下列命令,显示文件的权限:ls–lnew_script权限表明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod+xnew_script⑺要查看新的权限,输入:ls–l现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:new_script所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:commandnotfound输入下列命令:./new_script该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
程序运行过程如下:2、用Shell语言编制一Shell程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。
程序运行过程如下:3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“Endofprogram”,如果不同则显示“Endofprogram”。
程序运行过程如下:4、修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match”,不同则显示“Notmatch”,最后显示“Endofprogram”。
请使用if…then…else控制结构。
实验六SHELL 编程实验环境:Linux操作系统实验目的:(1)掌握vi 的三种工作方式,熟悉vi 编辑程序的使用。
(2)学习Shell 程序设计方法。
掌握编程要领。
实验内容:1.用vi 编写例1。
练习内部变量和位置参数的用法。
用chmod将文件的权限设置为可执行模式,并在提示符后键入命令行:$./prog1.或$sh prog1.屏幕显示:Name not provided实验截图:2.进一步修改程序prog1.h。
要求显示参数个数、程序名字,并逐个显示参数。
3.修改例1程序。
用read命令接受键盘输入。
若没有输入显示第一种提示,否则第二种提示。
4.用vi 编写例2、例3。
练习字符串比较运算符、数据比较运算符和文件运算符的用法,观察运行结果。
例2:例3:运行结果:5.修改例2程序。
使在程序运行中能随机输入字符串,然后进行字符串比较。
6.修改例3程序。
使在程序运行中能随机输入文件名,然后进行文件属性判断。
7.用vi 编写例4、例5、例6、例7 掌握控制语句的用法,观察运行结果。
例4:例5:loopcount = 0result = 0while [ $ loopcount –lt 10 ]doloopcount = `expr $ loopcount +1` result = `$ result + ( $ loopcount * 2)` doneecho “result is $ result”例6:loopcount = 0result = 0until [ $ loopcount –ge 10 ]doloopcount = `expr $ loopcount +1` result = `$ result + ( $ loopcount * 2)` doneecho “result is $ result”例7:8.用vi 编写例8 及例9。
掌握条件语句的用法,函数的用法,观察运行结果。
例8:假如给出月份数字作为参数编写程序displaymonth.h例9:9.编程,在屏幕上显示用户主目录名(HOME)、命令搜索路径(PATH),并显示由位置参数指定的文件的类型和操作权限。
shell系统实验报告《Shell系统实验报告》摘要:本实验通过对shell系统的学习和实践,对shell脚本编程进行了深入的研究和探讨。
通过实验,我们深入了解了shell系统的基本概念、语法和功能,并通过实际编程实践加深了对shell脚本的理解和掌握。
本实验报告将对实验过程、实验结果和实验感想进行详细的介绍和分析。
一、实验目的通过本次实验,我们的主要目的是深入了解shell系统的基本概念和语法,掌握shell脚本编程的基本方法和技巧,提高对Linux系统的操作和管理能力。
二、实验过程1. 学习shell系统的基本概念和语法规则;2. 编写简单的shell脚本,包括文件操作、流程控制、函数定义等;3. 运行和调试编写的shell脚本,检验脚本的正确性和可靠性;4. 分析实验结果,总结实验感想。
三、实验结果通过本次实验,我们深入了解了shell系统的基本概念和语法规则,掌握了shell 脚本编程的基本方法和技巧。
我们成功编写了一些简单的shell脚本,包括文件操作、流程控制、函数定义等,通过运行和调试这些脚本,我们验证了它们的正确性和可靠性。
实验结果表明,我们对shell系统有了更深入的认识和理解,对Linux系统的操作和管理能力得到了提高。
四、实验感想通过本次实验,我们对shell系统有了更深入的认识和理解,对Linux系统的操作和管理能力得到了提高。
我们深刻体会到了shell脚本编程的重要性和实用性,相信在今后的工作和学习中,我们会更加熟练地运用shell系统,提高工作效率和解决实际问题。
同时,我们也意识到了自己在shell系统方面的不足之处,今后需要进一步学习和实践,不断提高自己的技能水平。
综上所述,本次实验对我们的学习和成长都具有重要意义,我们将继续努力学习和提高自己,在shell系统和Linux系统方面取得更大的进步和成就。
操作系统实验四:Shell的实现⼀、实验内容H1实现具有管道、重定向功能的shell能够执⾏⼀些简单的基本命令,如进程执⾏、列⽬录等。
⼆、实验⽬的H11.学习并理解linux中shell的知识;2.重点学会编程实现管道和重定向的功能;3.实现⾃⼰的shell三、设计思路和流程图H11.对输⼊的命令进⾏解析H2实验内容主要是管道和重定向,这两个功能涉及shell“|”和“<”以及“>”等不同符号,所以要对输⼊的命令进⾏解析。
初步按照空格来分,之后再按照<、>、|这些涉及管道和重定向的符号来分。
2.简单命令的执⾏H2使⽤函数execvp可以实现简单的命令,这些命令暂时不涉及管道和重定向,函数原型为int execvp(const char *file ,char * const argv []);,execvp()会从PATH 环境变量所指的⽬录中查找符合参数file 的⽂件名,找到后便执⾏该⽂件,然后将第⼆个参数argv传给该欲执⾏的⽂件。
为了不造成阻塞,这⾥启⽤了⼀个新线程实现它,最后⽗进程需等待⼦进程,以回收分配给它的资源。
下⾯有些地⽅也⽤到这种⽅法。
3.输⼊输出重定向的实现H2实现重定向的主要函数是freopen,FILE *freopen( const char *path, const char *mode, FILE *stream );path: ⽂件名,⽤于存储输⼊输出的⾃定义⽂件名。
mode: ⽂件打开的模式。
和fopen中的模式(如r-只读, w-写)相同。
stream: ⼀个⽂件,通常使⽤标准流⽂件。
函数实现重定向,把预定义的标准流⽂件定向到由path指定的⽂件中。
要注意的是第⼆个参数,刚开始我是⽤的a+,结果每次输出都加到⽂件末尾。
后来查了⼀下,改成w+可以先清空再写⼊⽂件。
4.管道功能的实现H2命令之间通过|符号来分隔,使⽤pipe函数来建⽴管道。
实验报告(学生打印后提交)实验名称:shell编程实验时间: 10 年04月 21 日实验人员:(姓名)(学号)(年级)实验目的:1.熟悉使用Linux下的软件开发工具,如gcc2.熟练使用man帮助手册3.学习使用Linux的系统调用,对进程进行管理和完成进程之间的通信(如用信号和管道进行进程间通信)4.理解并发程序中的同步问题实验环境: linux实验步骤:1. 用帐户root登录,密码1234562. 自己用学号建立目录,把源文件拷入目录中3. 阅读关于fork,exec,wait,exit,pipe系统调用的man帮助手册4. 编译程序fork.c并运行,观察结果,观察进程5.编译程序pipe.c并运行,观察结果6.阅读关于函数sigaction,tcsetpgrp和setpgid的man帮助手册7.编译程序signal.c并运行,观察结果,观察进程8.编译程序process.c并运行,观察结果,观察进程9.写实验总结实验陈述:1、基础知识:✧什么是系统调用:系统调用是UNIX操作系统核心提供给用户程序使用的操作系统服务,系统调用主要提供用户程序对文件进行读写,进程的创建,删除和控制以及数据的输入/输出等。
✧简述fork调用:用fork()创建一个新的进程,成为原先进程的子进程,原先进程是父进程。
✧如何实现进程间的通信: UNIX进程通信方式有信号,管道,消息,共享存储区和信号量。
✧如何实现进程间的连接:可以利用管道和socket2、写出下列函数的原型fork: int fork();signal: int signal(int sig,int func);pipe:int pipe(int fildes[2]);tcsetpgrp: int tcsetpgrp(int fildes,pid_t pgid_id)3、运行和观察结果✧fork.c简述结果(不是执行结果):与执行ls -l/相同程序中如何区分父进程和子进程:通过fork的返回值pid的值的大小来区分子进程和父进程,如果pid的值等于0,表明是子进程,如果>0表明是父进程,如果小于0,表明子进程创建失败pipe.c简述结果(不是执行结果):相当于将ls –l /etc/内容重定向到一个地方(程序中是缓冲),然后用more命令以页为单位在屏幕上显示出重定向的内容vp(prog2_argv[0],prog2_argv)(第56行)是否执行,如果没有执行是什么原因:会执行,父进程创建子进程时后父进程和子进程的执行所随机的,所以只要第二次子进程创建成功,都会执行这一句话。
实验三 shell编程实验(一上机时间:任课教师:实验教师:实验成绩:一、实验目的1.了解shell的作用和主要分类。
2.掌握bash的建立和执行方式。
3.掌握bash的基本语法。
4.综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程。
二、实验注意事项实验室内的实验环境与系统是共用设施,请不要在系统内做对系统或对其他用户不安全的事情。
要求每个同学登录后系统后,要在自己的家目录下创建一个属于自己的子目录(以自己(拼音)名字或学号)。
以后所有工作都要在自己的目录内进行。
建议以后的实验都在同台计算机上做,这样可以保持连续性。
三、实验内容1.利用vi 建立一个脚本文件,该文件在用户输入年、月之后,自动打印数出该年该月的日历。
然后以3种不同方式执行该脚本,如有不能执行情况,请说明原因。
yan@ubuntu:~$ cat >timeecho "please inpute the mounth"read monthecho "please inpute the year"read yearcal $month $year2.编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match ”,并显示“End of program ”,如果不同则显示“End of program ”。
yan@ubuntu:~$ cat >bijiaoecho -n "please inpute word1:"read word1echo -n "please inpute word2:"read word2if test "$word1" = "$word2"thenecho "Match"fiecho "End of program"3.修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match ”,不同则显示“Not match ”,最后显示“End of program ”。
实训项目7 Shell 编程一、实训目的● 掌握Shell 环境变量、管道、输入输出重定向的使用方法。
● 熟悉Shell 程序设计。
二、项目背景某单位的系统管理员计划用Shell 编程编写一个程序实现USB 设备的自动挂载。
程序的功能如下: ● 运算程序时,提示用户输入“y ”或“n ”,确定是不是挂载USB 设备。
● 如果用户输入“y ”,则挂载这个USB 设备。
● 提示用户输入“y ”或“n ”,确定是不是复制文本。
● 如果用户输入“y ”,则显示文件列表,然后提示用户是否复制文件。
● 程序根据用户输入的文件名复制相应的文件,然后提示是否将计算机中的文件复制到USB 中。
● 完成文件的复制以后,提示用户是否卸载USB 设备。
三、实训内容练习Shell 程序设计方法及Shell 环境变量、管道、输入输出重定向的使用方法。
四、实训步骤●在Linux 系统的图形界面下利用Vi 编辑器输入程序代码,部分主要程序代码如下。
● 将文件保存为/program/usb.sh ,并利用chmod 命令修改usb.sh 的权限,使其可以执行。
● 设置PATH 环境变量,将/program 目录添加到系统的PATH 环境变量中,使得每次直接执行usb.sh就可以完成U盘的自动挂载。
Path=$path:/programecho $path●去掉usb.sh的执行权限,将改文件的内容分别利用输出重定向输出到/program/usbbak.sh文件和屏幕上。
重定向Cat usbmount.sh > test.sh五、实训思考题1.将本实训的USB项目的程序完成,并进行实际测试。
写出测试环境和测试结果。
2.修改系统的配置文件,使得usb.sh文件在用户每次登陆系统的时候可以自动执行。
六、实训报告要求●实训目的。
●实训内容。
●实训步骤。
●实训中的问题和解决方法。
●回答实训思考题。
●实训心得与体会。
●建议与意见。
1。
《操作系统》实验报告二实验名称:实验二Linux中Shell基本命令的使用实验日期:班级:学号:姓名:计算机号:一、实验目的1.掌握Shell基本命令的使用方法(命令补全、通配符、历史记录、别名、输出重定向、使用管道、作业控制)。
二、实验内容1、命令补全:1)登录后进入home目录并建立子目录mlbq,在mlbq子目录中建立如下子目录:news、bin、games、mail、programs、test。
2)通过命令补全功能只输入字母t进入test子目录。
3)在mlbq子目录中再建立一个子目录tools,如何通过命令补全功能进入test子目录。
4)在mlbq子目录下输入命令cd t<tab><tab>,出现什么结果。
2、通配符:1)在mlbq子目录中通过touch命令建立如下文件:ch1.doc、ch2.doc、ch3.doc、ch4*、ch5*。
2)通过通配符“*”列出mlbq子目录中所有文件扩展名为“.doc”的文件。
3)通过通配符“?”列出mlbq子目录中ch1.doc、ch2.doc和ch3.doc三个文件。
4)通过通配符“[…]”列出mlbq子目录中ch1.doc、ch2.doc和ch3.doc三个文件。
3、命令历史记录:1)显示当前系统中所有命令历史记录。
2)显示当前系统中最近6条命令。
4、别名:1)将Linux下的命令ls、cp、mv、mkdir和rmdir分别命名为别名dir、copy、rename、md和rd。
2)使用rename命令将mlbq子目录中的games子目录重命名为mygames。
3)取消rename命令的别名功能。
4)再次使用rename命令将mlbq子目录中的mygames子目录重命名为games,是否能够实现。
5)列出当前系统中所有已经定义的别名。
5、输出重定向:1)列出mlbq子目录下的所有文件和子目录,并将显示结果输出保存到一个名为ls.out的文件中并显示ls.out文件的内容。
实验报告
(学生打印后提交)
实验名称:shell编程
实验时间: 10 年04月 21 日
实验人员:(姓名)(学号)(年级)
实验目的:1.熟悉使用Linux下的软件开发工具,如gcc
2.熟练使用man帮助手册
3.学习使用Linux的系统调用,对进程进行管理和完成进程之间的通信(如用信号和管道进
行进程间通信)
4.理解并发程序中的同步问题
实验环境: linux
实验步骤:
1. 用帐户root登录,密码123456
2. 自己用学号建立目录,把源文件拷入目录中
3. 阅读关于fork,exec,wait,exit,pipe系统调用的man帮助手册
4. 编译程序fork.c并运行,观察结果,观察进程
5.编译程序pipe.c并运行,观察结果
6.阅读关于函数sigaction,tcsetpgrp和setpgid的man帮助手册
7.编译程序signal.c并运行,观察结果,观察进程
8.编译程序process.c并运行,观察结果,观察进程
9.写实验总结
实验陈述:
1、基础知识:
✧什么是系统调用:系统调用是UNIX操作系统核心提供给用户程序使用的操作系统服
务,系统调用主要提供用户程序对文件进行读写,进程的创建,删除和控制以及数
据的输入/输出等。
✧简述fork调用:用fork()创建一个新的进程,成为原先进程的子进程,原先进程是
父进程。
✧如何实现进程间的通信: UNIX进程通信方式有信号,管道,消息,共享存储区和信
号量。
✧如何实现进程间的连接:可以利用管道和socket
2、写出下列函数的原型
fork: int fork();
signal: int signal(int sig,int func);
pipe:int pipe(int fildes[2]);
tcsetpgrp: int tcsetpgrp(int fildes,pid_t pgid_id)
3、运行和观察结果
✧fork.c
简述结果(不是执行结果):与执行ls -l/相同
程序中如何区分父进程和子进程:通过fork的返回值pid的值的大小来区分子进程和父进程,如果pid的值等于0,表明是子进程,如果>0表明是父进程,如果小于0,表明子进程创建失败
pipe.c
简述结果(不是执行结果):相当于将ls –l /etc/内容重定向到一个地方(程序中是缓冲),然后用more命令以页为单位在屏幕上显示出重定向的内容
vp(prog2_argv[0],prog2_argv)(第56行)是否执行,如果没有执行是什么原因:会执行,父进程创建子进程时后父进程和子进程的执行所随机的,所以只要第二次子进程创建成功,都会执行这一句话。
✧signal.c
✧简述结果(不是执行结果):不断的输出父进程和子进程的ID号,父进程是3693,
子进程是3694
✧
怎样让函数
ChildHandle
r执行?当
子进程接收到信号的时候就执行ChildHandler函数
✧process.c
简述结果(不是执行结果):显示parent和child进程的进程号,其中parent 的进程号为5193,child的进程号为5194,然后使子进程所在的进程组成为前台
进程组,然后执行vi
进程
列表
中有
几
个./p
rocess,区别在哪里:进程中有两个,一个所主进程,在后台等待输入,子进程在前台调用vi
1.杀死主进程后,出现什么情况:子进程也结束了
实验总结:
1.通过本次实验,了解了linux下的软件开发工具gcc的具体使用方法
2.学会用man帮助手册,查看一些系统调用的具体内容
3学习使用Linux的系统调用,如用信号和管道,对进程进行管理和完成进程之间的通信。