实验五Shell简单命令
期末 操作系统实验课程设计

操作系统实验课程设计(二)(参照实验五)学院:计算机科学与工程专业:信息管理工作与信息系统学号:2008142118 姓名:丁建东一、实验题目:设计一个Shell解释器二、实验目的:本设计的主要目的在于学会如何在Unix系统下创建进程和管理进程。
三、实验内容:实现一个简单的shell(命令行解释器),类似于bash, csh等。
要求实现的shell支持以下内部命令:1.cd <目录>更改当前的工作目录到另一个<目录>。
如果<目录>未指定,输出当前工作目录。
如果<目录>不存在,要求有适当的错误信息提示。
改命令应能够改变PWD的环境变量。
2.echo <内容>显示echo后的内容且换行。
3.help简短概要地输出你的shell的使用方法和基本功能。
4.jobs输出shell当前的一系列子进程,要求提供子进程的命名和PID号。
5.quit, exit, bye退出shell。
所有的内部命令应当优于在$PATH中同名的程序。
任何非内部命令必须请求shell创建一个新进程,且该子进程执行指定的程序。
这个新进程必须继承shell的环境变量和指定的命令行参数。
要求实现的shell支持以下内部命令:Batch Processing 如果shell启动带有一个文件名作为参数,打开该文件并执行文件里所有命令。
待所有进程全部结束退出shell。
四、实验思路:1.所用到的系统函数(1)打开目录void cd()API调用:int chdir(dir);getcwd(dir,dir_max);实现:改变当前目录,并判断目录是否存在。
(2)回应void echo()实现:用户输入字符串,以回车结束输入。
char echo_string[echo_len][echo_max];//用户输入命令,以空格符隔开,存为字符串数组按顺序输出用户输入的字符串。
(3)输出当前子进程Void jobs()API调用:shmget(),shmat()实现:开辟一个共享内存区,一旦创建一个子进程,就把该进程的进程ID和名字记字共享区里,在子进程结束的时候消除该记录。
shell脚本常用命令

shell脚本常⽤命令shell基本命令1.#!/bin/sh是指此脚本使⽤/bin/sh来解释执⾏。
解释:#! 是⼀个约定的标记,它告诉系统这个脚本需要什么解释器来执⾏,即使⽤哪⼀种 Shell。
2.echo 命令⽤于向窗⼝输出⽂本。
举例:echo "Hello World !"3.your_name="qinjx"赋值变量echo ${your_name}打印变量;使⽤变量的时候加括号和美元符4.chmod +x ./test.sh #使脚本具有执⾏权限./test.sh #执⾏脚本chmod 777 /tmp -R 意思是把tmp⽂件夹及其⼦bai⽂件夹的权限全部修改为777解释语句⼀:ping -c 5 > /dev/null 2>&11. ping -c 5 -c<完成次数>:设置完成要求回应的次数;2. >/dev/null这条命令的作⽤是将标准输出1重定向到/dev/null中。
/dev/null代表linux的空设备⽂件,所有往这个⽂件⾥⾯写⼊的内容都会丢失,俗称“⿊洞”。
那么执⾏了>/dev/null之后,标准输出就会不再存在,没有任何地⽅能够找到输出的内容。
3. 2>&1这条命令⽤到了重定向绑定,采⽤&可以将两个输出绑定在⼀起。
这条命令的作⽤是错误输出将和标准输出同⽤⼀个⽂件描述符,说⼈话就是错误输出将会和标准输出输出到同⼀个地⽅。
linux在执⾏shell命令之前,就会确定好所有的输⼊输出位置,并且从左到右依次执⾏重定向的命令,所以>/dev/null 2>&1的作⽤就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重⽤了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。
执⾏了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到⽂件中。
常用shell脚本指令

常用shell脚本命令1、显示包含文字aaa的下一行的内容:sed -n '/aaa/{n;p;}' filename2、删除当前行与下一行的内容:sed -i '/aaa/{N;d;}' filename3、删除当前行与下两行的内容:sed -i '/aaa/{N;N;d;}' filename依次类推,删除三行,则为{N;N;N;d;},分析知:N为next4、得出以空格为分割的字符串中单词的个数,即统计个数:awk ' { print NF } '如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f则执行 echo $VALUE | awk ' { print NF } ' 后的结果为65、在linux中建立一个文件与另一文件的链接,即符号链接ln -s /var/named/chroot/etc/named.conf named.conf这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。
即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如:lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf ->/var/named/chroot/etc/named.conf注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。
所以需对实际文件进行删除操作。
6、显示指定字符范围内的内容:如:显示文件test.txt中字符#test begin与#test end之间所有的字符sed -n "/#test begin/,/#test end/p" test.txt或 awk "/#test begin/,/#test end/" test.txt在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。
shell的基础语法

shell的基础语法Shell是一种命令行解释器,它允许用户与操作系统进行交互并执行各种操作。
Shell的基础语法包括以下几个方面:1. 命令执行,在Shell中,用户可以直接输入命令来执行各种操作,例如`ls`命令用于列出当前目录下的文件和文件夹,`mkdir`命令用于创建新的目录等。
2. 变量,在Shell中,可以使用变量来存储数据并在需要的时候进行引用。
变量的赋值和引用使用类似于`variable_name=value`和`$variable_name`的语法。
3. 控制结构,Shell支持基本的控制结构,如条件判断和循环。
条件判断使用`if-then-else-fi`语法,而循环则可以使用`for`、`while`等关键字来实现。
4. 函数,Shell中可以定义和调用函数,使用`function_name() { ... }`的语法来定义函数,使用`function_name`来调用函数。
5. 管道和重定向,Shell支持管道和重定向操作,允许用户将一个命令的输出作为另一个命令的输入,或者将命令的输入/输出重定向到文件或其他设备。
6. 通配符,Shell支持通配符来匹配文件名,例如``用于匹配任意字符,`?`用于匹配单个字符等。
7. 注释,在Shell脚本中,可以使用`#`符号来添加注释,注释部分将被解释器忽略。
总的来说,Shell的基础语法包括了命令执行、变量、控制结构、函数、管道和重定向、通配符以及注释等内容。
掌握这些基础语法对于编写Shell脚本和在命令行下进行操作都是非常重要的。
希望这些信息能够帮助你更好地理解Shell的基础语法。
Shell编程实验指导

Shell编程实验一、实验目的了解 Shell 的作用和主要分类。
了解 Bash的一般语法规则。
练习编写简单的shell程序。
二、实验内容1.Shell变量的定义及其使用。
2.位置参数和环境变量。
3.Shell中的特殊字符。
4.条件判断结构与循环结构5.函数的定义和使用三、预备知识1、LINUX环境下常用命令和VI编辑器的操作。
2、了解Shell作用和主要分类等基础知识。
四、实验设备及工具软件:PC机操作系统REDHAT ELAS4环境五、实验原理及说明Shell是Linux系统中一个重要的层次,它是用户与系统交互作用的界面。
在介绍Linux命令时,Shell都作为命令解释程序出现:它接收用户打入的命令,进行分析,创建子进程实现命令所规定的功能,等子进程终止工作后,发出提示符。
这是Shell最常见的使用方式。
Shell 除了作为命令解释程序以外,还是一种高级程序设计语言,它有变量,关键字,有各种控制语句,如if, case, while, for 等语句,有自己的语法结构。
利用Shell程序设计语言可以编写出功能很强、但代码简单的程序,特别是它把相关的Linux命令有机地组合在一起,可大大提高编程的效率,充分利用Linux系统的开放性能,设计出适合自己要求的命令。
六、实验步骤1.语法练习(1)Shell变量Shell有两种变量:环境变量和临时变量。
在Shell脚本中临时变量又分为两类:用户定义的变量和位置参数。
用户定义的变量用户定义的变量是最普遍的Shell变量,变量名是以字母或下化线打头的字母、数字和下线符序列,并且大小写字母意义不同。
变量名的长度不受限制。
定义变量并赋值的一般形式是:变量名=字符串例如,MYFILE=/usr/meng/ff/m1.ca.定义并显示变量的值在程序中使用变量的值时,要在变量名前面加上一个符号“$”。
这个符号告诉Shell,要读取该变量的值。
作为交互式输入手段,可以利用read命令由标准输入(即键盘)上读取数据,然后赋给指定的变量。
实验报告五用户与组群管理

实验五用户与组群管理实验环境:Linux操作系统实验目的:(1)熟练掌握手工启动前后台作业的方法。
(2)熟练掌握进程与作业管理的相关 Shell 命令。
(3)掌握 at 调度和 cron 调度的设置方法。
(4)了解进行系统性能监视的基本方法。
实验内容及步骤:1.桌面环境下管理用户与组群操作要求1:新建两个用户帐号,其用户名为 xuser1 和 xuser2,口令为“e12ut59er”和“wfu1t28er”。
操作步骤及结果截图:(1)以超级用户身份登录X Window 图形化用户界面,依次单击「系统」菜单=>「管理」=>「用户和组群」,启动「用户管理者」窗口。
(2)单击工具栏上的「添加用户」按钮,出现「创建新用户」窗口。
在「用户名」文本框中输入用户名“xuser1”,在「口令」文本框中输入口令“e12ut59er”,在「确认口令」文本框中再次输入口令“e12ut59er”,如图5-2 所示,然后单击「确定」按钮,返回「用户管理者」窗口。
(3)用同样的方法新建用户xuser2。
(4)依次单击顶部面板的「应用程序」=>「附件」=>「文本编辑器」,启动 gedit 文本编辑器,打开/etc/passwd 和/etc/shadow 文件将发现文件的末尾出现表示 xuser1 和xuser2用户帐号的信息。
打开/etc/group 和/etc/gshadow 文件将发现文件末尾出现表示xuser1和 xuser2 私人组群的信息。
(5)按下CTRL+ALT+F2 组合键切换到第2 个虚拟终端,输入用户名xuser2 和相应的口令可登录Linux 系统,说明新建用户操作已成功。
(6)输入“pwd”命令,屏幕显示用户登录后进入用户主目录“/home/xuser2”。
(7)输入“exit”命令,xuser2 用户退出登录。
(8)按下ALT+F7 组合键返回GNOME 桌面环境。
操作要求2:锁定xuser2 用户帐号操作步骤及结果截图:(1)在「用户管理者」窗口选中xuser2 用户帐号,单击工具栏上的「属性」按钮,打开「用户属性」窗口。
shell命令总结实验报告

shell命令总结实验报告shell 命令总结第⼀章实验思路1 运⾏环境VMware软件、CentOS 7、MobaXterm第⼆章实验⽬的1 掌握Linux的使⽤。
2 掌握shell常⽤命令。
3 掌握MobaXterm软件的使⽤第三章实验步骤Shell:多任务多⽤户系统3.1 终端物理终端:直接连接到的是键盘、⿏标 /dev/console虚拟终端:(/dev/tty)基于物理终端,以软件形式实现的登录⽅式,以ctrl+alt+Fn[1-6],centos 7模拟终端:(/dev/pts/)基于物理终端,以软件形式实现的登陆⽅式,通过ssh、telent远程登录的、(可以有很多个,⽆穷多个),在图形界⾯打开的命令⾏3.1.1 终端交互式接⼝GUI:图形界⾯,GNOME,KDE, XFCECLI: 命令⾏,shell3.2 shell 应⽤程序/bin/sh/bin/bash ⽐较常⽤shell,跟随⽤户启动的独⽴程序/usr/bin/sh/usr/bin/bash/bin/tcsh/bin/csh3.3 命令提⽰符#:管理员使⽤的命令提⽰符$: 普通⽤户使⽤的命令提⽰符3.4 命令3.4.1 shell 内嵌命令,执⾏效率⾼,常驻内存shell外部命令,根据需要执⾏which whereis 查找外部命令的位置3.4.2 帮助⽂档help,主要针对内嵌man(manual),主要针对外部命令3.4.3 主要命令1. echo $SHELL 查看当前使⽤的shell程序,当系统登录shell时默认使⽤的是/bin/bash2. exit 退出当前shell3. cat /etc/shells查看设备安装的所有shell程序4. pstree 查看进程树5. tty 查看登录⽅式 TTY查看登陆⽅式,tty1说明是在终端上登陆的。
pts说明是远程登陆的,0说明为从Window上登陆的。
6. type 查看是内部命令还是外部命令如下,查看cd 和ls命令7.enable -a 查看所有内嵌命令8. which 查看外部命令位置(以及帮助信息)9. whereis 查看外部命令位置10. man 查看外部命令使⽤说明,如man ls(ls 为外部命令)11. help 查看内部命令的使⽤说明,如help cd( cd 为内部命令),当⽤help查看ls这个外部命令时,是查询不出来的12. whatis 查看和更新数据库信息(帮助⽂档)1. ctrl+c 终⽌shell命令第四章问题解决没有注意到⼀些路径的设置,然后出现了些错误或者命令没执⾏成功。
shell脚本介绍以及常用命令

shell脚本介绍以及常⽤命令Shell脚本Shell Script,Shell与Windows/Dos下的相似,也就是⽤各类命令预先放⼊到⼀个⽂件中,⽅便⼀次性执⾏的⼀个,主要是⽅便进⾏设置或者管理⽤的。
但是它⽐Windows下的批处理更强⼤,⽐⽤其他编程的程序效率更⾼,毕竟它使⽤了Linux/Unix下的命令。
换⼀种说法也就是,shell script是利⽤shell的功能所写的⼀个程序,这个程序是使⽤,将⼀些shell的语法与指令写在⾥⾯,然后⽤正规表⽰法,管线命令以及数据流重导向等功能,以达到我们所想要的处理⽬的shell和shell脚本的区别:shell是什么呢?确切⼀点说,Shell就是⼀个,它的作⽤就是遵循⼀定的语法将输⼊的命令加以解释并传给系统。
它为⽤户提供了⼀个向Linux发送请求以便运⾏程序的接⼝系统级程序,⽤户可以⽤Shell来启动、挂起、停⽌甚3⾄是编写⼀些程序。
Shell本⾝是⼀个⽤C语⾔编写的程序,它是⽤户使⽤Linux的桥梁。
Shell既是⼀种命令语⾔,⼜是⼀种(就是你所说的shell脚本)。
作为命令语⾔,它互动式地解释和执⾏⽤户输⼊的命令;作为程序设计语⾔,它定义了各种和参数,并提供了许多在⾼阶语⾔中才具有的控制结构,包括循环和分⽀。
它虽然不是 Linux系统的⼀部分,但它调⽤了系统内核的⼤部分功能来执⾏程序、创建⽂档并以并⾏的⽅式协调各个程序的运⾏。
交互式shell和⾮交互式shell 交互式模式就是shell等待你的输⼊,并且执⾏你提交的命令。
这种模式被称作交互式是因为shell与⽤户进⾏交互。
这种模式也是⼤多数⽤户⾮常熟悉的:登录、执⾏⼀些命令、签退。
当你签退后,shell也终⽌了。
shell也可以运⾏在另外⼀种模式:⾮交互式模式。
在这种模式下,shell不与你进⾏交互,⽽是读取存放在⽂件中的命令,并且执⾏它们。
当它读到⽂件的结尾,shell也就终⽌了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux基础与Shell编程实验指导书
实验一Linux指令系统
实验学时:2学时
实验类型:验证性
一.实验目的
使用命令,查看目录,对目录下的文件进行操作,查找过滤,压缩打包操作
二.实验内容
●使用Linux指令,查看目录,修改目录。
●使用Linux指令,创建文件,修改文件属性。
●使用cat和find命令查找。
●使用tar命令进行文件的解压缩。
三.实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
四.实验步骤
1.使用cd命令,查看/tmp目录。
2.创建myDir文件,查看属性。
3.修改目录的拥有者和工作组。
4.使用myDir下的所有文件和子目录都自动拥有工作组xz
5.在myDir目录下创建文件,测试上面的操作是否成功。
6.查看/tmp目录下的内容及属性。
7.创建newfile文件。
设置newfile文件权限模式。
8.把newfile备份到/tmp/myDir目录下,并改名为newfile.bak。
9.在/root目录下为该文件创建1个符号链接。
10.使用find命令查找系统中是否存在文件grub.conf.
11.查找系统中所有空文件,并记录到/tmp/myDir/zerofile.log.
12.搜索/etc/grup.conf文件中含有root字符串的行。
13.过滤显示/etc下文件名中包含init字符串的文件或目录名称。
14.把/tmp目录打包成tmp.tar,放在/root目录下.
15.把/tmp目录压缩打包成tmp.tar.gz,放在/root目录下.
16.比较tmp.tar与tmp.tar.gz的大小。
17.不解包只查看压缩包tmp.tar.gz中的内容。
18.解压tmp.tar.gz的内容到/tmp/myDir目录。
实验二Linux进程操作
实验学时:2学时
实验类型:验证性
一.实验目的
使用命令,查看系统中的进程。
二.实验内容
●使用Linux指令,查看系统中消耗CPU资源最多的几个进程。
●查看系统中所有进程。
●查找ssh服务守护进程的进程ID号。
●杀掉守护进程。
●使用apt-get 命令进行“fish”软件的安装,更新,卸载。
也可安装3d-chess
软件。
三.实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
同时将apt-get命令的使用方法整理进实验报告。
四.实验步骤
19.使用top命令,查看系统中消耗CPU资源最多的几个进程。
20.使用ps命令,查看系统中所有进程。
21.通过管道,查找ssh服务守护进程的进程ID号。
22.使用kill命令杀掉该进程。
实验三Linux网络管理
实验学时:2学时
实验类型:验证性
一.实验目的
通过命令,对网络管理进行操作。
二.实验内容
●通过ifconfig命令,显示配置网络设备。
●使用route命令查看当前路由表的信息。
●使用ping命令,测试两台电脑是否能相互通信。
●安装ftp服务器及客户端。
并验证连接是否有效。
三.实验要求
按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。
同时将ftp服务器的配置文档整理进实验报告。
四.实验步骤
23.使用ifconfig命令,查看当前系统活动的网络接口配置信息。
24.使用ifconfig命令启动和关闭指定网卡。
25.使用ifconfig命令配置系统ip地址。
26.使用route命令查看当前路由表信息。
27.使用ping命令,查看结果。
28.通过netsata命令显示网络信息。
实验四Shell综合
实验学时:2学时
实验类型:综合性
一.实验目的
通过对Shell语法的练习,熟练运用知识点,完成时间密码验证,计算时间差,按时备份文件程序。
二.实验内容
●熟悉Unix/Linux的运行环境,实验平台。
●练习Unix/Linux的文本行编辑器vi的使用方法
●熟练掌握Shell的基本语法,完成时间验证,计算时间差以及按时备份文件程序。
三.实验要求
1. 利用Shell编程,实现密码的验证
1) Shell程序提示输入密码
2) 用户输入
3) 系统将用户输入的密码与password比较
4) 若一致,则显示成功
5) 否则,提示错误,进行输入
6) 按Q/q退出程序
2. 编写小程序,计算用户输入的时间与系统时间的差值。
1) 提示用户输入时间
2) 用户输入
3) 判断输入时间是否合法
4) 若合法,则计算差值,判断显示“已过多少天”或者”还有多少天”
5) 不合法,结束程序
3. 编写一个备份程序,备份/home目录下的非目录文件,到/usr/logs目录下,当时间的分钟为5的倍数是,自动备份。
1) 启动程序,当系统时间分钟为5的倍数,自动备份。
2) 提示是否继续备份
3) 用户输入
4) 若选择n/N,退出程序
5) 其他则下一个5分钟,自动备份
四.实验步骤
1.使用vi命令编写第一个脚本输入头注释。
2.使用while do done循环作为程序的主题,每次循环中,使用read命令获取用户输
入的密码,通过与本地的密码判断,如果成功,输出密码正确,退出程序,否则判断是否是q/Q,匹配的话,通过break或者exit退出程序,否则输出密码错误,进行输入。
3.使用chmod密码给脚本提升权限,运行脚本。
4.编写计算时间差程序,首先使用read命令获取用户输入的时间,cal命令查找年月
判断用户输入的时间是否合法,使用while循环,知道用户输入正确,程序才向下执行。
5.使用date命令把用户输入的时间及当前系统时间转换成时间戳,作用是后面计算
日期差
6.计算出两时间戳的差,转换成天数,判断天数,根据正负符号显示还有多少天和已
过多少天
7.提示脚本权限,运行脚本,查看结果
8.编写自动备份程序,当系统时间的分钟为5的倍数是,使用tar命令把/home目录
下的非目录文件打包放在/usr/logs目录下。
首先判断/usr/logs目录存在否,若果不存,创建目录
9.使用while循环控制,取得系统时间的分钟,判断是否为5的倍数,若果是,开始
备份,备份完成后,提示用户输入是否继续备份,选择是,等待时间,继续,否则,退出循环,程序结束。
10.提升脚本权限,运行脚本,查看结果。