操作系统实验报告(shell命令解释器)
实验报告二用户界面与 Shell 命令
实验二用户界面与Shell 命令实验环境:Linux 环境实验目的:(1)掌握图形化用户界面和字符界面下使用 Shell 命令的方法。
(2)掌握 ls、cd 等 Shell 命令的功能。
(3)掌握重定向、管道、通配符、历史记录等的使用方法。
(4)掌握手工启动图形化用户界面的设置方法。
实验内容:1.图形化用户界面下的 Shell 命令操作操作要求1:显示系统时间,并将系统时间修改为2011 年9 月17 日零点。
操作过程:(1)启动计算机,以超级用户身份登录图形化用户界面;用户名为root。
(2)依次单击顶部面板的「应用程序」菜单=>「附件」=>「终端」,打开桌面环境下的终端工具。
(3)输入命令“date”,显示系统的当前日期和时间。
(4)输入命令“date 0917********”,屏幕显示新修改的系统时间。
在桌面环境的终端结果:(1)输入命令“date”显示系统当前日期为:2015年4月20号星期一 18:16:12.(2)输入命令“date 0917********”修改系统的时间为2011年9月17号零点。
操作要求2:切换为普通用户,查看 2011 年 9 月 17 日是星期几。
操作过程:(1)输入“su - stu”命令切换当前用户为普通用户 stu。
(2)输入命令“cal 2011”,屏幕上显示出 2011 年的日历,结果:由下图可以看出2011 年 9 月 17 日是星期天。
操作要求3:查看 ls 命令的-s 选项的帮助信息操作过程:方法一:(1)输入“man ls”命令,屏幕显示出手册页中 ls 命令相关帮助信息的第一页,介绍ls 命令的含义、语法结构以及-a、-A、-b 和-B 等选项的意义。
(2)使用 PgDn 键、PgUp 键以及上、下方向键找到-s 选项的说明信息。
(3)由此可知,ls 命令的-s 选项等同于--size 选项,以文件块为单位显示文件和目录的大小。
操作系统shell命令解析器
一.程序概述1.完成的任务在Linux环境下编写一个简单的命令解释器即定义一个命令使它具有Linux中某些命令的功能,可以实现获取用户输入的指令、可解析指令、可执行命令等功能,以此来熟悉Linux编程环境,加强对Linux命令的理解及函数的运用。
2.遇到的困难及解决的问题在程序设计过程中,遇到的困难主要有以下几个:一、系统函数调用问题;二、对文件的操作;三、复制文件。
通过查阅Linux c函数库后,知道了如何调用系统函数,并解决了对文件的操作;而文件的复制,则采用了如下思想:打开一个输入文件,创建一个输出文件,建立一个BUF大小的缓冲区;然后在判断输入文件未完的循环中,每次读入多少就向输出文件中写入多少,直到输入文件结束。
二.概念原理1.基本概念为用户提供了输入命令和参数,以此向Linux内核发送请求以便运行程序的界面系统级程序。
下图为Linux、UNIX系统层次结构图:2.原理解释用户输入的命令行,提交到系统内核处理,并将结果返回给用户。
三.详细设计1.总体设计运行程序后,首先初始化,显示系统有的命令,然后通过用while(1)循环,连续的获取用户输入的命令,一直到用户输入quit退出循环,接着程序结束。
2.主要函数及功能2.1 int init()显示系统命令等信息。
int init()//初始化{cout<<"*****************欢迎使用GPLinux*********************"<<endl;cout<<"* 系统命令 *"<<endl;cout<<"* 1.quit 退出! *"<<endl;cout<<"* 2.mypwd 显示当前目录! *"<<endl;cout<<"* 3.mycdir 创建新目录! *"<<endl;cout<<"* 4.mydir 显示文件! *"<<endl;cout<<"* 5.mycd 改变路径! *"<<endl;cout<<"* 6.mydel 删除文件! *"<<endl;cout<<"* 7.mydeldir 删除目录! *"<<endl;cout<<"* 8.mycp 复制文件! *"<<endl;cout<<"*****************************************************"<<endl;return 0;}2.2 int MyPwd()用于显示当前目录。
Shell编程实验报告
南京信息工程大学实验(实习)报告【实验目的】1、了解和熟悉创建并使用脚本的步骤。
2、熟悉bash的控制结构。
3、学会简单的shell编程。
【实验内容】1、创建一个简单的列目录和日期的shell 脚本并运行之。
步骤:⑴输入下列命令,创建一个新文件:cat >new_script⑵输入下列行:echo “Your files are”lsecho “today is”date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:cat new_script⑷运行脚本,输入它的文件名:new_script该脚本不运行。
⑸输入下列命令,显示文件的权限:ls –l new _script权限表明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod +x new_script⑺要查看新的权限,输入:ls –l现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:new_script所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:command not found输入下列命令:./new_script该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
程序运行过程如下:2、用Shell 语言编制一Shell 程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。
程序运行过程如下:3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program”。
程序运行过程如下:4、修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match”,不同则显示“Not match”,最后显示“End of program”。
linuxshell编程实验总结
linuxshell编程实验总结Linux Shell编程实验总结在Linux系统中,Shell编程是一种强大的工具,可以帮助用户进行自动化任务、脚本编写和系统管理。
通过学习和实践Shell编程,我深深地体会到了其在提高工作效率和简化任务流程方面的重要性。
在这篇文章中,我将总结我在Linux Shell编程实验中的经验和心得。
一、实验概述在这次Linux Shell编程实验中,我学习并应用了Shell脚本语言,掌握了基本的语法和命令,并通过实验来加深对Shell编程的理解和掌握。
实验的内容包括变量的定义和使用、条件语句的实现、循环结构的应用等。
二、变量的定义和使用在Shell编程中,变量的定义和使用是非常重要的一部分。
通过实验,我学会了如何使用“=”符号来给变量赋值,并可以在后续的命令中使用这个变量。
在实践中,我发现给变量加上$符号可以获取变量的值,并且可以在字符串中插入变量。
这在编写脚本时非常有用,可以将一些可变的部分定义为变量,提高程序的可读性和可维护性。
三、条件语句的实现条件语句在Shell编程中起到了重要的作用,可以根据不同的条件执行不同的命令。
通过实验,我掌握了Shell中常用的条件判断语句,如if语句和case语句。
在编写条件语句时,我注意到要使用适当的比较运算符(如“-eq”表示等于、“-ne”表示不等于等),并在语句块的结尾加上“fi”或“esac”来结束条件语句的定义。
四、循环结构的应用在实践中,我发现循环结构是Shell编程中非常重要的一部分,可以重复执行特定的任务。
通过实验,我掌握了两种常见的循环结构:for循环和while循环。
在编写循环结构时,我注意到要使用适当的循环控制语句,如“break”可以用于跳出循环,“continue”可以用于跳过当前循环中的剩余命令,继续下一次循环。
五、实验心得通过这次实验,我深刻认识到了Shell编程在自动化任务和脚本编写方面的重要性。
Shell编程既可以简化日常工作中的重复性任务,又可以提高工作效率和减少出错的可能性。
操作系统实验四:Shell的实现
操作系统实验四: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命令解释器实验报告
实验报告实验名称:实现一个shell命令解释器学员:学号:年级:专业:所属学院:计算机学院指导教员:职称:实验室:实验日期:目录1.功能描述 (3)2.主要数据结构 (3)3.主要程序流程图 (4)4.主要功能实现方法和系统调用 (4)4.1初始化环境 (4)4.2打印提示符,获取用户输入 (5)4.3解析命令 (5)4.4执行命令 (5)4.4.1内部命令 (5)4.4.2外部命令 (5)4.4.3重定向功能 (6)4.4.4管道功能 (6)5.测试结果 (7)6.心得体会 (10)1.功能描述本实验完成了一个shell命令解释器,实现了shell的解释命令功能,实现了内部命令(包括自定义命令)、外部命令、重定向功能和多管道等功能。
具体功能描述如下:1)内部命令:●可以使用常用的如cd、echo、history、exit等命令●自定义命令1)smile命令:打印出笑脸2)myinfo命令:打印出作者信息和版本信息2)外部命令:可实现cp、rm等所有外部命令。
3)重定向:通过输入重定向符号’<’ 或输出重定向’>’ ,把一行命令分成两部分,前者为需要执行的命令,后者为一个重定向文件。
输入重定向是把文件内容作为输入传到前面的命令中,而输出重定向则是把命令的结果传入重定向文件中。
4)管道:通过管道符号’|’ 把一条命令分成两部分,前一部分命令运行后,将结果放入管道,后一部分命令从管道中取出该结果,作为输入继续执行。
最多可以实现10个管道。
2.主要数据结构本程序主要使用字符数组进行命令、路径的存储与分析。
3.主要程序流程图命令的分析执行过程包括:初始化环境,打印提示符,获取用户输入命令,解析命令,寻找命令文件和执行命令,如图1。
图1程序设计流程图4.主要功能实现方法和系统调用下面将详细说明本shell解释器的实现原理和所用到的系统调用。
总结起来用到的系统调用主要有:Open();close();dup();pipe();execv();chdir();getcwd();如何使用这些系统调用实现shell的各项功能,下面将详细说明。
实验报告二用户界面与Shell命令
实验报告⼆⽤户界⾯与Shell命令实验⼆⽤户界⾯与Shell 命令实验环境:Linux 环境实验⽬的:(1)掌握图形化⽤户界⾯和字符界⾯下使⽤ Shell 命令的⽅法。
(2)掌握 ls、cd 等 Shell 命令的功能。
(3)掌握重定向、管道、通配符、历史记录等的使⽤⽅法。
(4)掌握⼿⼯启动图形化⽤户界⾯的设置⽅法。
实验内容:1.图形化⽤户界⾯下的 Shell 命令操作操作要求1:显⽰系统时间,并将系统时间修改为2011 年9 ⽉17 ⽇零点。
操作过程:(1)启动计算机,以超级⽤户⾝份登录图形化⽤户界⾯;⽤户名为root。
(2)依次单击顶部⾯板的「应⽤程序」菜单=>「附件」=>「终端」,打开桌⾯环境下的终端⼯具。
(3)输⼊命令“date”,显⽰系统的当前⽇期和时间。
(4)输⼊命令“date 0917********”,屏幕显⽰新修改的系统时间。
在桌⾯环境的终端结果:(1)输⼊命令“date”显⽰系统当前⽇期为:2015年4⽉20号星期⼀ 18:16:12.(2)输⼊命令“date 0917********”修改系统的时间为2011年9⽉17号零点。
操作要求2:切换为普通⽤户,查看 2011 年 9 ⽉ 17 ⽇是星期⼏。
操作过程:(1)输⼊“su - stu”命令切换当前⽤户为普通⽤户 stu。
(2)输⼊命令“cal 2011”,屏幕上显⽰出 2011 年的⽇历,结果:由下图可以看出2011 年 9 ⽉ 17 ⽇是星期天。
操作要求3:查看 ls 命令的-s 选项的帮助信息操作过程:⽅法⼀:(1)输⼊“man ls”命令,屏幕显⽰出⼿册页中 ls 命令相关帮助信息的第⼀页,介绍ls 命令的含义、语法结构以及-a、-A、-b 和-B 等选项的意义。
(2)使⽤ PgDn 键、PgUp 键以及上、下⽅向键找到-s 选项的说明信息。
(3)由此可知,ls 命令的-s 选项等同于--size 选项,以⽂件块为单位显⽰⽂件和⽬录的⼤⼩。
Shell编程实验报告
南京信息工程大学实验(实习)报告【实验目的】1、了解和熟悉创建并使用脚本的步骤。
2、熟悉bash的控制结构。
3、学会简单的shell编程。
【实验内容】1、创建一个简单的列目录和日期的shell脚本并运行之。
步骤:⑴输入下列命令,创建一个新文件:cat >n ew_script⑵输入下列行:echo Your files are ”lsecho today is ”date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:cat n ew_script⑷运行月脚本,输入它的文件名:n ew_script该脚本不运行。
⑸输入下列命令,显示文件的权限:ls - l new _script权限表明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod +x n ew_script⑺要查看新的权限,输入:ls - l现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:n ew_script所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:comma nd not found输入下列命令:./n ew_script该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.” 程序运行过程如下:一2、用Shell 语言编制一 Shell 程序,该程序在用户输入年、月之后,自动打印 数出该年该月的日历。
程序运行过程如下:[root (?rhl00 root 1H cat>timee echo M Please input tl )e month: read nitonth echo R Pl ease input tl )c ycai': M read yearcal $fnonth $year [root(3rh 100 root] H bash times PloatJR input thp month: 9 PlpaHR input, thp ypar: 2012 九片 2012 0 一二三回五六6 7 8 13 \A 15 20 21 22 27 23 29 root]H |3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个 单词相同则显示“ Match ”,并显示“ End of program ”,如果不同则显示“ End ofprogram ”。
《操作系统》实验二 Linux中Shell命令的使用
《操作系统》实验报告二实验名称:实验二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文件的内容。
Linux实验报告(实验四)shell编程实验
Linux实验报告(实验四)shell编程实验实验四 shell编程实验(二)班级:姓名:学号:上机时间:年月日任课教师:实验教师:实验成绩:一、实验目的综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程。
二、实验注意事项实验室内的实验环境与系统是共用设施,请不要在系统内做对系统或对其他用户不安全的事情。
要求每个同学登录后系统后,要在自己的家目录下创建一个属于自己的子目录(以自己(拼音)名字或学号)。
以后所有工作都要在自己的目录内进行。
建议以后的实验都在同台计算机上做,这样可以保持连续性。
三、实验内容1. 编写一个脚本,求斐波那契数列的前10项及总和。
num1=1num2=1echo -n “$num1+$num2”sum=2for((i=1;i<=8;i++))dotmp=$(expr $num1 + $num2)echo -n “+$tmp”((num1=num2))((num2=tmp))sum=$(expr $sum + $tmp)doneecho “=$sum”2.编写一个脚本,求一个数的逆序。
echo -n please input num:read numecho -n The num iswhile [ $num -gt 0 ]dosd=$(($num % 10))echo -n "$sd"num=$(($num/10))doneecho3.设计一个Shell程序,在用户主目录下建立一个userdata目录,在此目录下再建立5个目录,即user1~user5,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。
(注意:最后删除自己所建立的目录,恢复原样,以便后面同学做此实验)mkdir -m 754 /home/userdatai=1temp=/home/userdata/userwhile[ $i -le 5 ]domkdir -m 754 $temp$ilet”i=i+1”#done4.用Shell编程,判断一文件是不是普通文件,如果是将其拷贝到/home/student/test 目录下,用命令查看test目录内容,最后再删除test目录。
《操作系统》实验报告(2)
c.将subdir目录的读权限去掉,看看是否能用ls命令看到其中内容?
权限不够
(三)Shell程序设计
1.上机编辑、执行实验内容中的例1~例6过程,写出每个脚本(例1~例5)的功能和执行结果;
然后把t01.txt复制一个新文件t03.txt,catt01.txt>t02.txt;
用cat命令将f01.txt的内容追加到t01.txt的末尾,catf01.txt>> t01.txt;
再用diff命令比较t01.txt,t02.txt和t03.txt,比较t01.txt,t02.txt:diff t01.txt t02.txt,结果是否相同:__相同___;比较t01.txt,t03.txt:diff t01.txt t03.txt,结果是否相同:不相同;比较t02.txt,t03.txt:diff t02.txt t03.txt,结果是否相同:不相同。出现上述结果的原因是:______________________________________________________________________________。
2.修改例5,使脚本中不出现break循环控制语句;
3.编写一个Shell过程完成如下功能:
a.合并两个$1、$2文件为$3,并显示内容。
b.如果缺少$3,那么先报告缺少$3,将合并后的内容输出到totaltext.txt,并显示内容。
c.如果缺少$2、$3那么先报告缺少$2、$3,只显示$1的内容。
b.用ln命令给t03.txt建立一个符号链接t04.txt,ln–st03.txt t04.txt;用cat命令看看t04.txt,___cat t04.txt_____;然后删去t03.txt,___rm t03.txt____;再用cat命令看看t04.txt,___cat t04.txt___;结果是:___t04.txt为空____
关于shell的实验报告
操作系统课程设计报告学院:计算机科学与工程学院班级: *****************学生姓名: ***************** 学号: *****************指导老师:提交日期:一、课程设计目的本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储管理、文件系统等操作系统概念。
二、课程设计要求设计一设计任务:模拟Linux文件系统在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux 文件系统。
1.在现有机器硬盘上开辟100M的硬盘空间,作为设定的硬盘空间。
2.编写一管理程序simdisk对此空间进行管理,以模拟Linux文件系统,要求:(1)盘块大小1k(2)空闲盘块的管理:Linux位图法(3)结构:超级块, i结点区, 根目录区3.该simdisk管理程序的功能要求如下:(1)info: 显示整个系统信息(参考Linux文件系统的系统信息),文件可以根据用户进行读写保护。
目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开。
(2)cd …: 改变目录:改变当前工作目录,目录不存在时给出出错信息。
(3)dir …: 显示目录:显示指定目录下或当前目录下的信息,包括文件名、物理地址、保护码、文件长度、子目录等(带/s参数的dir命令,显示所有子目录)。
(4)md …: 创建目录:在指定路径或当前路径下创建指定目录。
重名时给出错信息。
(5)rd …: 删除目录:删除指定目录下所有文件和子目录。
要删目录不空时,要给出提示是否要删除。
(6)newfile …: 建立文件。
(7)cat …: 打开文件。
(8)copy …: 拷贝文件,除支持模拟Linux文件系统内部的文件拷贝外,还支持host文件系统与模拟Linux文件系统间的文件拷贝,host文件系统的文件命名为<host>…,如:将windows下D:盘的文件\data\sample\test.txt文件拷贝到模拟Linux文件系统中的/test/data目录,windows下D:盘的当前目录为D:\data,则使用命令:simdisk copy <host>D:\data\sample\test.txt /test/data或者:simdisk copy <host>D:sample\test.txt /test/data(9)del …: 删除文件:删除指定文件,不存在时给出出错信息。
操作系统实验报告_shell
k = 0;
j = 0;
}
if(j == 0){
continue;
} else{
buf[j++] = '\0';
if(flag == 0){
argv[li_cmd][k] = (char *)malloc(sizeof(char) * j);
strcpy(argv[li_cmd][k],buf);
int is_founded(char * cmd)
{
int k = 0;
while(envpath[k] != NULL){ strcpy(buf,envpath[k]);
strcat(buf,cmd);
if(access(buf,F_OK) == 0){ return 1;
} k++;
}
return 0;
if((input[i] == ' ') || (input[i] == '\t') || (input[i] == '\0') ||
(input[i] == '|') || (input[i] == '>') || (input[i] == '\n')){
if((input[i] == '|') || (input[i] == '>')){
while(s[i] != '\0'){ if(s[i] == ':') {
buff[j++] = '/';
buff[j] = '\0';
操作系统实验课程作业shell编程 有文本文件student.txt,该文件是所有学生的信息,每个学生存储一行信息,
操作系统课程报告题目:shell编程实现简单的学生信息管理学院:信息工程与自动化学院专业:计算机科学与技术班级:姓名:学号:指导老师:2011年6月6号一、shell编程课程设计的目的和要求目的:熟悉shell命令的功能和使用方法掌握shell编程的基本思想理解shell程序的设计方法熟悉shell程序的编辑、运行、调试方法与过程要求:有文本文件student.txt,该文件是所有学生的信息,每个学生存储一行信息,信息格式如:学号:姓名:性别:专业如(101:张三:男:计算机)设计一个shell,名称为student.sh,该shell完成如下功能:1)当输入 student.sh -a 101:张三:男:计算机时,首先判断101记录是否存在,如果不存在,则把该信息写入文件,如果存在,则给出提示,并输出文件中学号为101的该行信息2)当输入 student.sh -d 101 时,首先判断101记录是否存在,如果不存在,给出提示,如果存在,则提示用户确认是否要删除记录,如用户输入y或者yes,则删除文件中学号为101的该行信息,如果用户输入n或no时,则不做删除操作3)当输入 student.sh -s 101 时,首先判断101记录是否存在,如果不存在,给出提示,如果存在,则输出文件中学号为101的该行信息4)当输入 student.sh时,输出文件的全部内容5)当用户输入的选项不正确时,给出错误提示,并输入该shell的用法,如(student.sh -q 123456)二、实验所用仪器、材料微型计算机一台Linux操作系统三、shell编程简介shell是一种命令解释程序(命令解释器),shell解释用户输入的命令行,提交系统内核处理,并将结果返回给用户。
与Linux命令一样都是实用程序,但两者又有区别。
一旦用户注册到系统后,shell就被系统装入内存,并一直运行到用户退出系统之止;而一般命令仅当被调用时,才由系统装入内存执行。
shell实验报告
操作系统实验报告(shell命令解释器)目录1功能描述 (2)2主要数据结构 (2)3主要自定义函数功能及接口说明 (3)4主要功能实现方法和系统调用 (4)4.1重定向功能 (4)4.2多管道功能 (4)4.3命令的后台运行 (5)4.4历史命令 (6)4.5CD命令 (6)4.6其他简单命令 (6)4.7其他自定义命令 (6)5心得体会 (6)6源代码 (7)1功能描述(用红色标示的字体显示了本解释器完成的基本功能)本实验完成了一个shell命令解释器,实现了shell的解释命令功能,实现了重定向功能和多管道、后台运行等功能。
具体功能描述如下:1)解释器的命令格式为cmd1[<infileName][|cmd2][|cmd3]…[|cmdn][>or>>outfileName][&]2)cmdi为命令名+参数形式的命令,<为输入重定向,后跟输入重定向文件名infileName;>或>>后跟输出重定向文件名,输出内容将写入outfileName,>>表示以追加方式写入文件,>则表示以覆盖方式写入;3)实现了多管道4)命令结尾可加后台运行符号& ,表示此命令将以后台运行的方式执行5)实现了cd命令6)exit为退出命令7)history为历史命令,可以显示最近执行的命令,最多100条8)!i为执行历史命令,意为执行第i条历史命令。
!!为执行上一条命令。
9)’|’为管道符号,使用|符号隔开的若干条命令之间,前一条命令的输出是后一条命令的输入。
10)自定义命令myname,将输出此Shell的版本信息11)本解释器命令格式中的简单命令可为所有外部命令和一部分内部命令和自定义命令2主要数据结构本shell解释器实现手法上非常直观易懂,没有用到复杂的数据结构。
运行过程中大部分数据采用字符数组的形式存储。
其中定义了命令结构类型cmd,用以表示一条简单命令。
【最新精选】shell编程实验报告
南京信息工程大学实验(实习)报告【实验目的】1、了解和熟悉创建并使用脚本的步骤。
2、熟悉bash的控制结构。
3、学会简单的shell编程。
【实验内容】1、创建一个简单的列目录和日期的shell 脚本并运行之。
步骤:⑴输入下列命令,创建一个新文件:cat >new_script⑵输入下列行:echo “Your files are”lsecho “today is”date按回车键将光标移到一个新行,按Ctrl+D键保存并退出。
⑶检查文件内容,确保它是正确的:cat new_script⑷运行脚本,输入它的文件名:new_script该脚本不运行。
⑸输入下列命令,显示文件的权限:ls –l new _script权限表明该文件不是可执行。
要通过简单调用文件名来运行脚本,必须有权限。
⑹输入下列命令,使new_script变成可执行文件。
chmod +x new_script⑺要查看新的权限,输入:ls –l现在拥有文件的读、写和执行权限。
⑻输入新脚本的名字以执行它:new_script所有输入到文件的命令都执行,并输出到屏幕上。
⑼如果接收到错误信息,比如:command not found输入下列命令:./new_script该命令行通知shell到哪里寻找shell脚本new_script,即您的当前目录“.”。
程序运行过程如下:2、用Shell 语言编制一Shell 程序,该程序在用户输入年、月之后,自动打印数出该年该月的日历。
程序运行过程如下:3、编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同则显示“Match”,并显示“End of program”,如果不同则显示“End of program”。
程序运行过程如下:4、修改上述程序,编程提示用户输入两个单词,并将其读入,然后比较这两个单词,如果两个单词相同显示“Match”,不同则显示“Not match”,最后显示“End of program”。
操作系统实验报告(包括线程,进程,文件系统管理,linux+shell简单命令)
操作系统实验报告班级:030613学号:03061331姓名:裴帅帅实验一:进程的建立一、实验内容创建进程及子进程,在父子进程间实现进程通信,创建进程并显示标识等进程控制块的属性信息,显示父子进程的通信信息和相应的应答信息。
使用匿名管道实现父子进程之间的通信。
二、源程序1、创建匿名管道SECURITY_ATTRIBUTES sa;sa.bInheritHandle=true;sa.lpSecurityDescriptor=NULL;sa.nLength=sizeof(SECURITY_ATTRIBUTES);if(!CreatePipe(&m_hRead,&m_hWrite,&sa,0)){MessageBox("创建匿名管道失败");return false;}2、创建子进程STARTUPINFO si;ZeroMemory(&si,sizeof(STARTUPINFO));si.cb=sizeof(STARTUPINFO);si.dwFlags=STARTF_USESTDHANDLES;si.hStdInput=m_hRead;si.hStdOutput=m_hWrite;si.hStdError=GetStdHandle(STD_ERROR_HANDLE);if(!CreateProcess(NULL,"子进.exe",NULL,NULL,true,0,NULL,NULL,&si,&pi)) {MessageBox("创建子进程失败");CloseHandle(m_hRead);CloseHandle(m_hWrite);m_hRead=NULL;m_hWrite=NULL;return;}3、销毁子进程if(m_hRead)CloseHandle(m_hRead);if(m_hWrite)CloseHandle(m_hWrite);TerminateProcess(pi.hProcess ,0);4、向匿名管道中写信息即发送信息DWORD deWrite;CString sendData;m_s.GetWindowText(sendData);int length;length=sendData.GetLength ();char *buffer=new char[length+1];for(int i=0;i<length;i++){buffer[i]=sendData[i];}buffer[length]='\0';if(!WriteFile(m_hWrite,buffer,length,&deWrite,NULL)){MessageBox("发送数据失败");}delete buffer;5、从匿名管道中读取信息即接收信息char buff[100];DWORD deRead;if(!ReadFile(m_hRead,buff,100,&deRead,NULL)){MessageBox("读取数据失败");}CString receiveData;for(int i=0;i<=(int)deRead;i++){receiveData+=buff[i];}receiveData+='\0';m_r.SetWindowText (receiveData);三、实验结果实验结果实现了父进程向匿名管道中写信息,然后在子进程端可以从匿名管道中读取该信息;也可以子进程向管道中写入信息,然后父进程从中读取后显示。