还剩16页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
实验课题命令解释程序设计与实现1Linux实验报告实验内容及要求1Linux命令解释程序功能设计要求1)选取和设计实现一组内部命令(五条以上);2)外部命令执行采用直接调用exec系统调用的方式来实现;3)至少一条内部命令采用直接调用相应系统调用的方式来实现;4)系统环境变量(至少包括当前目录)支持;5)在Linux操作系统上启用(或替换原命令解释程序Shell)测试验证开发、运行及测试环境21)虚拟环境软件Oracle VMVirtualBox2)操作系统Oracle Linux
6.53)编辑器vim4)编译器gcc实验步骤3采用c语言编写该Linux命令解释程序首先包含unistd.h、sys/syscall.h等头文件以及完成各个功能的函数声明主程序中利用循环结构完成不限次的命令提示符显示和命令输入,并判别输入的命令是否合法,是内部命令还是外部命令将Linux命令解释程序的各个功能封装成函数,完成具体的命令执行处理实现具体功能步骤如下采用间接调用实现的内部命令
3.
13.
1.1显示指定目录下文件列表设计该命令关键词为“1s”,功能为用户输入该命令后,指定具体的目录路径,可显示在该目录下的文件列表,并将文件编号显示,格式为“file编号文件名”,每行显示一个文件的文件名如该过程中出现错误导致不能显示文件列表则输出具体错误提示采用间接调用相应系统调用的方式将该功能完成后封装为void list_()函数
3.
1.2显示当前路径设计该命令关键词为“pwd”,功能为用户输入该命令后,在下一行显示当前路径并回车换行采用间接调用相应系统调用的方式将该功能完成后封装为void pwd_()函数
3.
1.3文件重命名
5.
3.2显示当前一系列进程用户输入该命令后,然后显示出当前一系列进程和子进程部分输出结果如图10Qinjobs init-pabrtd—acpid一atd—audi td------{audi td-automount4*[{automount}]—bonobo-acti vati----------{bonobo-activat芸皿案日-certmonger17281251-clock-applet Oracle Linux
6.5-console-kit-dae63*[{console-kit-da}]rondupsd2*[dbus-daemon]—2*[dbus-1aunch]-devkit-power-da-gconf-im-settin—gconfd-2-gdm-binary-j-gdm-si mple-sl av——Xorg-gdm-session-wor nome-session—[—abrt-applet-bluetooth-apple—gdu-notificatio-gnome-panel—gnome-power-man—gnome-volume-co—gpk-update-icon—metacity-nautilus—nm-applet—polkit-gnome-au—python1-gnome-session}{gdm-session-wo1—{gdm-simple-sla-{gdm-binary所示图10系统环境变量支持
5.4用户输入该命令export后,然后输入需要设置的系统环境变量和变量值,格式为“[系统变量名称]二[系统变量值]”,若该系统环境变量没有设置过,则初始化该变量完成例如下例中初始化某系统环境变量为test=9999初始化完成后,o使用“env”命令查看结果,系统环境变量已经初始化,输出结果如图11所不若该系统环境变量为曾经设置过,则修改该变量完成例如下例中设置系统环境变量为test=998”设置完成后,使用“env”命令查看结果,系统环境变量已经重新设置,输出结果如图12所示iQinexport test=9999QinenvHOSTNAME=testl TERM=xterm SHELL=/bin/bash HISTSIZE=1000SSH-CLIENT=
192.
168.
125.10309622QTDIR=/usr/lib64/qt-
3.3OLDPWD=/rootQTINC=/usr/lib64/qt-
3.3/include SSH_TTY=/dev/pts/OUSER=rootLS_COLORS=rs=0:di=01;34:1n=01;36:mh=00:pi=w=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tg:.dz=01;31:*.gz=01;31:*.1z=01;31:*.xz=01;ace=01;31:*.200=01;31:*.cpio=01;31:*.7z=01;*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=;1;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.■Ol35*.avi-Ol;35;*.fli«Ol35*.flv«Ol;35=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*xa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01j MAlL=/var/spool/mail/rootPATH=/usr/lib64/qt-
3.3/bin:/usr/local/sbin:PWD=/tmp LANG=en_US.UTF-8SSH ASKPASS=/usr/libexec/openssh/gnome-ssh-HISTCONTROL=1gnoredups-SHLVL=1HOME=/root LOGNAME=rootQTLIB=/usr/lib64/qt-
3.3/lib CVS_RSH=SShSSH_CONNECTION=
192.
168.
125.
103096192.
168.LESSOPEN=|/usr/bin/lesspipe.sh%s G_BROKEN.FILENAMES=1—/q h11p Itest=9999I Qin|A奏音17281251Oracle Linux
6.5图11|Qinexport test=998QinenvHOSTNAME=testl TERM=xterm SHELL=/bin/bash HISTSIZE=1000SSH-CLIENT=
192.
168.
125.103096QTDIR=/usr/lib64/qt-
3.3OLDPWD=/rootQTINC=/usr/lib64/qt-
3.3/include SSH_TTY=/dev/pts/O USER=rootLS_COLORS=rs=0:di=01;34:1n=01;36:mh=00:pi=40;•w=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:^ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:w.tiff=01;;;1;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4\«0135*.avi«0135;;*.fli«0135*.flV30135*.=01;35*.ogx=01;35:*.aac=01;36:*.au=01;36:*.f4xa=01;36*.oga=01;36:*.spx=01;36:*.xspf=01;36:MAlL=/var/spool/mai1/rootPATH=/usr/lib64/qt-
3.3/bin:/usr/local/sbin:/u PWD=/tmpLANG=en_US.UTF-8SSH-ASKPASS=/usr/l1bexec/openssh/gnome-ssh-asl HlSTCONTROL=ignoredupsSHLVL=1HOME=/root LOGNAME=root QTLIB=/usr/lib64/qt-
3.3/1ib CVS_RSH=SShSSH_CONNECTION=
192.
168.
125.
103096192.
168.12!LESSOPEN=|/usr/bin/lesspipe.sh%sG_BROKEN_FILENAMES=1/shell秦晋Qin17281251Oracle Linux
6.5图12以上功能均在在Linux操作系统上启用并测试验证通过,暂未发现错误技术难点及解决方案61)初次接触Linux操作系统,对于原命令解释程序shell的命令等并不熟悉对于设计与实现基于Linux内核的命令解释程序(Shell)有一定难度需首先熟悉原命令解释程序shell的使用方法和原理,再自行实现一个命令解释程序2)外部命令执行采用直接调用exec系统调用的方式Exec是一系列的函数,包括execl、execlp execleexecv execvp具体使用哪个来完成外部命令o的功能,需要了解各个函数间的区别,联系和常用的用法3)系统环境变量支持的功能要求可以设置和初始化系统环境变量,如何完成该功能是一个难点该功能试图利用外部命令,调用原命令解释程序shell的export命令实现,但未能实现后利用内部命令的间接调用系统调用的方式通过setenvO函数实现疑难解惑及经验教训71)内部命令和外部命令的区分内部命令是命令解释程序直接解释执行的;外部命令是其他可执行程序支持的内部命令和外部命令的区分都是对于自行实现的命令解释程序shell,而不是原Linux操作系统上的命令解释程序shello2)直接调用系统调用和间接调用系统调用间接调用系统调用是用户进程调用C语言函数库中的函数来调用系统调用;直接调用系统调用是利用syscallO函数使用系统调用号来直接调用系统调用结论与体会8本次Linux命令解释程序设计与实现实验成果总结如下1)设计和实现一组内部命令一共8条,实现典型内部命令的处理功能,包括Is,pwd,copy,rename,echo,help,export,exit/quit;2)设计和实现外部命令一共2条,包括jobs,env执行采用直接调用exec系统调用的方式来实现;3)一条内部命令copy采用直接调用相应系统调用的方式来实现,其他内部命令采用间接调用相应系统调用的方式来实现;4)系统环境变量(至少包括当前目录)支持,通过export命令功能实现系统环境变量的设置和初始化;5)在Linux操作系统上启用并测试验证,未发现错误;6)命令提示符显示、命令辨别(区分内部命令与外部命令及不同内部命令)和执行处理;通过本次Linux命令解释程序设计与实现实验,本人对于初次实操接触的Linux操作系统有了初步的了解特别是对于Linux操作系统的原命令解释程序的操作和一些典型命令的使用有了一定掌握通过对于Linux操作系统的原命令解释程序的学习,自行编写C语言程序设计实现自己的命令解释程序在过程中,学习了Linux系统上的C语言编辑、编译和与运行和具体一些c语言的头文件和函数库中的函数并且加深了本人对于理论课程中讲解的内部命令和外部命令,系统直接调用和间接调用系统调用等概念的理解最终,本人自行实现了基于Linux内核的命令解释程序Shell,主要包括系统环境变量的设置和初始化、系统命令提示符显示、命令辨别解析区分内部命令与外部命令及不同内部命令、典型内部命令等处理功能,并在Linux操作系统上测试验证通过在实验报告内容中运行结果截图的适当位置中应有机融入了个人姓名、学号、计算机系统信息等凸显个人标记特征的信息源程序文件及源码清单9shell,c文件源码如下:#include/zstdio.h〃#includez,string.h〃#include/zunistd.h〃#include,zsys/types.h〃#includez,sys/stat.h〃ttinclude^sys/syscall.h〃#include〃stdlib.h〃#include,zdirent.h〃#include〃stddef.h〃#includez/fcntl.h〃#include/zmalloc.h〃#define buffsize1024ttdefine0_RD0NLY00ttdefine0_RW066void list;void pwd_;void copy_;void rename_;void echo_;void help;int jobs_;int environ_;void export_;void env_storechar command2[];void envexport char command2[];struct valstruct charname
[50];char value
[50];;int env_num=0;char*env_arrary
[256]={0};extern char**environ;int main{char command
[100];while1printf〃Qin〃;scanf〃%s〃,command;if strcmpcommand,〃ls〃=0{list_;}else ifstrcmpcommand,〃pwd〃=0{pwd_;}else ifstrcmpcommand,/zcopy/z==0{copy_;else ifstrcmpcommand,“rename=0{rename_;}else ifstrcmpcommand,echo=0{echo_;}else ifstrcmpcommand,help=0{help_;}else ifstrcmpcommand,z,jobs,z==0{jobs_;else ifstrcmpcommand,//env,/==0{environ_;else ifstrcmpcommand,“export=0{export_;else ifstrcmpcommand,〃exit〃=0strcmp command,〃quit〃=0{printf zzthank you for using!bye~\n〃;exit0;else{printf inputfalse!please inputagain!\n/z;}return0;void list_char command2
[50];struct direntGentry;DIR*olist=NULL;int i=l;scanf〃%s〃,command2;fflushstdin;ifolist=opendircommand2==NULL{printf,zopendir false!\nz,;whileentry=readdirolist{printf,zfile%d:%s\n〃,i,entry-d_name;i++;}ifclosedirolist!=0{printfclosedir false!\n〃;void pwdchar*path=NULL;path=getcwdNULL,0;printfpath;printf〃\n〃;freepath;void copychar cpl
[30],cp2
[30],buf[buffsize];int fdl,fd2;int n;int flag=l;printf^pleace input the file name to be copied:\nz,;scanf〃%s〃,cpl;fflushstdin;printf,zpleace input the new file name:\n,z;scanf〃%s〃,cp2;iffdl=syscal1SYS_open,cpl,0_RD0NLY==-l{printf/zopen the file false!\n,z;flag=0;}ifn=syscallSYS_read,fdl,buf,buffsize==-1{printf readthe first file false!\n,z;flag=0;}iffd2=syscallSYS creat,cp2,0RW==-1{printf createthe filefalse!\n,z;flag=0;}if syscallSYS_write,fd2,buf,n=-l{printf z,write thesecond filefalse!\nz,;flag=0;}if syscallSYS_close,fdl=T{printf z,close thefirstfilefalse!\n,z;flag=0;}ifsyscallSYS_close,fd2==-l{printf z,close thesecond filefalse!\n,z;flag=0;}ifflag{printf,zcopy the new file success!\n,z;}}void rename_{char newname
[30],oldname
[30];printf,zpleace input the old file name:;scanf〃%s〃,oldname;fflush stdin;printf,zpleace inputthe newfile name:;scanf〃%s〃,newname;fflushstdin;if renameoldname,newname!=0{printf change the new name false!\n,z;else{printf^changethe newname success!\nz,;}void echo_int i;char command2
[30];scanf〃%s〃,comniand2;fflushstdin;int len=strlencommand2;fori=0;ilen;i++{ifcommand2[i]!={putcharcommand2[i];putchar\n,;void help_-4--X-%/!\y—*【1[I I I I\/zts ztsxjs xTszrs zlxzjs zjszTs zTsxjs yfxzTs zTs zTszTsZTS zjszts zTs zjs xjszrs zTxxfs zTszTs zjszrx xTszTs zrsxTs xTxxTszTs zTsxjs xszTx ztszTszjsxjs zTx/\II〃);printfCls catalog\tdisplay fileunder thiscatalogd;printf z/pwd\tdisplay thecurrent path\n〃;printf/zcopy\tcopy a file becomesa newfile\n〃;printf z/rename\t renameafile\n〃;printf z,echocontent\tprint a line content\n,,;printf/zhelp\tdisplay instructions、;printf z,jobs\tdisplay process name and pid...\n〃;printf Czenv\tdisplay environment variable\n,/;printfexport varilablename=value\tset environmentvariable\n,z;printf,zquit,exit\texit produce\n,z;int jobs_pid_t pid=fork;if pid0{fprintfstderr,“Fork Failed;return1;}else ifpid==0{execlp〃pstree〃,〃-p〃,NULL;else{wait;}return0;}int environ_{pid_t pid=fork;if pid0{fprintfstderr,“Fork Failed;return1;else ifpid==0{execlp〃env〃,NULL;else{wait;}return0;}void export_charcommand2
[100];scanf〃%s〃,command2;env_store comniand2;env_export comniand2;}void env_storechar command2[]int len=strlencomma.nd2;envarrary[envnum]=char*malloclen+1;strcpy envarrary[env num],command2;env_num++;}void env_exportchar command2[]struct val_struct val={0};int i=0;char*tmp=command2;while*tmp!=={val.name[i]=*tmp;i++;tmp++;}val.name[i]=\0;tmp++;i=0;while*tmp!=\0{val.value[i]=*tmp;i++;tmp++;}val.value[i]=,\0;setenv val.name,val.value,1;设计该命令关键词为“rename”,功能为用户输入该命令后,在下一行显示a pleace inputthe old file name:,用户需输入需要重命名的文件名,然后显示pleaceinput the newfile name:,用户需输入该文件的新的文件名,即可完成对文件的重命名完成后显示提示重命名工作失败或成功采用间接调用相应系统调用的方式将该功能完成后封装为void rename.函数
3.
1.4显示输入内容设计该命令关键词为“echo”,功能为用户输入该命令后,输入空格,然后输入需要显示的内容,即可在下一行显示上述用户希望输出的内容并回车换行采用间接调用相应系统调用的方式将该功能完成后封装为void echo_函数使用帮助设计该命令关键词为“help”,功能为用户输入该命令后,然后显示本命令解释程序的合法命令及其具体的功能说明采用间接调用相应系统调用的方式将该功能完成后封装为void help_函数
3.
1.6退出程序设计该命令关键词为“exit”或“quit”,功能为用户输入该命令后,显示“thank youfor using!bye,之后该命令解释程序Shell退出到Linux操作〜系统上的原命令解释程序ShelE采用间接调用相应系统调用的方式完成因该功能代码较简单直接在主程序中实现并未封装为函数
3.
1.7设置和初始化系统环境变量此处略,详见下文
3.4系统环境变量支持中的说明采用直接调用的内部命令
3.
23.
2.1文件拷贝设计该命令关键词为“copy”,功能为用户输入该命令后,然后显示“pleaceinput the file name tobe copied:,用户输入需要复制的文件的文件名,然后显示“pleace inputthe newfile name:,用户输入新拷贝文件的文件名,即可完成文件的拷贝如该过程中出现错误导致文件拷贝不成功则输出具体错误提示采用直接调用系统调用的方式将该功能完成后封装为void copy_函数外部命令
3.
33.
3.1显示环境变量设计该命令关键词为“env”,功能为用户输入该命令后,然后显示出所有的系统环境变量,每行显示一个采用直接调用exec系统调用的方式将该功能完成后封装为int environ_函数设计该命令关键词为“jobs”,功能为用户输入该命令后,然后显示出当前一系列进程和子进程采用直接调用exec系统调用的方式将该功能完成后封装为intjobs_函数
3.4系统环境变量支持设计该命令关键词为“export”,功能为用户输入该命令后,输入需要设置的系统变量名称和变量值,格式为“[系统变量名称]二[系统变量值]”然后即可设置完成采用间接调用相应系统调用的方式分别实现保存在本地用户变量中和保存在系统环境变量种,并分别封装为void env_store和void env_export函数最后将上述功能函数完成后封装为void export」函数以上代码编写完成后,通过Linux操作系统中的gcc编译器编译后运行,验证是否运行成功,功能是否完善,是否存在错误或问题返回上述步骤修改代码,直到测试验证通过关键数据结构和算法流程4在主程序中的关键数据结构是字符数组,用于接收用户输入的命令关键的算法结构是循环结构,利用死循环结构用户可以不限次输入命令供程序执行处理,直到用户输入退出的命令则退出该循环结构,程序退出在循环结构中,输出系统命令提示符,提示用户输入用户输入命令存入字符串数组后,将该命令与预设的命令依次比较是否符合某一个,则进入相应命令的处理过程若均不符合则输出输入错误的提示,继续回到循环开头输出系统命令提示符等待下一次输入命令采用间接调用实现的内部命令
4.
14.
1.1显示指定目录下文件列表关键数据结构是另一字符数组,用于接收用户在命令后输入的指定目录;结构体“struct dirent*entiry”,用于存储该目录下文件,包括文件名;变量DIR*olist用于存储打开目录函数的返回值,判别是否打开成功并读取该目录下文件该命令是间接调用相应的系统调用实现的方式关键算法是用户输入该命令和指定路径后,调用pendir函数打开指定的目录若返回值为空则打开失败,输出错误提示利用循环结构调用readdirO函数读取该目录下文件,并依次输出文件序号和文件名循环结束后,调用closedir函数关闭该目录若关闭失败则输出错误提示
4.
1.2显示当前路径关键数据结构为字符型指针,用于指向当前路径该命令是间接调用相应的系统调用实现的方式关键算法是用户输入该命令后,调用getcwdO函数获取当前路径,由指针指向该空间,然后输出该路径最后释放该指针空间关键数据结构为两个字符型数组,用于存储新文件名和旧文件名该命令是间接调用相应的系统调用实现的方式关键算法是用户输入该命令后,分别输入旧文件名和新文件名存入数组调用rename函数,将文件重命名最后输出命名成功或失败的提不
4.
1.4显示输入内容关键数据结构为字符型数组,用于存储用户除命令外输入的内容该命令无需调用系统调用关键算法是用户输入该命令后,将命令后的内容除空格外依次输出,最后输出换行即可
4.
1.5使用帮助在该函数中输出定义好的命令和相应使用帮助即可
4.
1.6退出程序输出用户提示,调用函数exit退出程序即可
5.
1.7设置和初始化系统环境变量此处略,详见下文
4.4系统环境变量支持中的说明采用直接调用的内部命令
4.
24.
2.1文件拷贝关键数据结构为三个字符型数组,用于存储需拷贝的文件的文件名和拷贝文件的文件名以及拷贝的部分文件内容该命令是直接调用相应的系统调用实现的方式关键算法是用户输入该命令以及需拷贝的文件的文件名和拷贝文件的文件名后,使用syscallO函数和系统调用号SYS_open,采用只读模式打开需要拷贝的文件,若打开失败输出相应提示使用syscallO函数和系统调用号SYSjead,读取该文件的内容和字节数量,若读取失败输出相应提示使用syscallO函数和系统调用号SYS_creat,采用读写模式创建拷贝的新文件,若创建失败输出相应提示使用syscall函数和系统调用号SYS_write,向新文件中写入读取的内容,若写入失败输出相应提示使用syscallO函数和系统调用号SYS_close,分别关闭两个文件,若关闭失败则分别输出相应提示若以上步骤均成功则最后输出相应拷贝成功提示
5.3外部命令该命令是采用直接调用exec系统调用实现的方式调用fork函数生成子进程并返回pid,根据该值判断如果出现错误,fork返回一个负值,此时打印错误信息并返回;在子进程中,fork返回0,此时调用execlp命令参数为“env”,即可显示所有的系统环境变量;在父进程中,fork返回新创建子进程的进程ID,需调用wait函数等待该命令是采用直接调用exec系统调用实现的方式调用fork函数生成子进程并返回pid,根据该值判断如果出现错误,fork返回一个负值,此时打印错误信息并返回;在子进程中,fork返回3此时调用execlp命令参数为pstree-p”,即可以树状图显示一系列子进程;在父进程中,fork返回新创建子进程的进程ID,需调用wait函数等待
4.4系统环境变量支持关键数据结构为自定义的结构体,结构体内为两字符型数组,分别用于存储系统环境变量的名称和变量的值该命令是间接调用相应的系统调用实现的方式关键算法是用户输入该命令后和系统环境变量的设置后,调用setenv函数设置该环境变量并设置为可复写的,方便后续修改该变量的值同时,附加在本地变量中也保存了上述设置的系统环境变量在存储变量的数组中保存上述系统环境变量即可编译运行测试结果5编译运行自行实现的命令解释程序shell,o,显示出命令输入提示符“Qin〉”,提示用户输入命令,如图1所示[root@testl tmp]^./shell.oi秦晋17281251Oracle Linux
6.5采用间接调用实现的内部命令
4.
15.
1.1显示指定目录下文件列表用户输入命令1s后,指定具体的目录路径,可显示在该目录下的文件列表,并将文件编号显示,格式为“file编号:文件名”,每行显示一个文件的文件名,如图2所示binIs/tmp Irile1:esd-0file2:gnome-system-monitor.oracle.848510800file3:pulse-DbopTk5mleWF file4:virtual-root.49uq9Z file5:pulse-U81rl6dr7ucy file6:.Xll-unix file7:.file8:virtual-root.oZgJOpfile9:gnome-system-monitor.root.1491541235file10:shell.c file11:test file12:.XO-lockfile13:keyring-scFnMDfile14:.iCE-unixfile15:vi rtual-root.oyfyA4file16:testlfile17:vi rtual-root.411L08file18:orbit-gdm file19:orbit-root file20:..file21:.esd-1101file22:shell.ofile23:virtual-oracle.1kBDWYfile24:pulse-Hzxq2BylRTjifile25:・shell.o.swp Qin塞普17281251OracleLinux
6.
55.
1.2显示当前路径Qinpwd*9/tmD Qin17281251Oracle Linux
6.5用户输入命令pwd后,在下一行显示当前路径并回车换行如图3所示
5.
1.3文件重命名用户输入该命令rename后,在下一行显示pl eaceinputtheoldfilename:,用户需输入需要重命名的文件名,然后显示upleace inputthe newfilename:,用户需输入该文件的新的文件名,即可完成对文件的重命名并显示成功提示再次输出该目录下文件,可见文件已经重命名,如图4所示Qinrenamepleace inputtheoldfilename:shell.c pleace inputthenew filename:shell
3.c changethf newnamesuccess!QinIs/tmp file1:.esd-0file3:pulse-DbopTk5mleWFfile4:virtual-root.49uq9Zfile5:pulse-U81r16dr7ucyfile6:.Xll-unixfile7:.file8:virtualMoot.oZgJOpfile9:shell
3.cfile11:test file12:.XO-lockfile13:keyring-scFnMDfile14:.ICE-unixfile15:vi rtual-root.oyfyA4file16:testlfile17:vi rtual-root.411L08file18:orbit-gdmfile19:orbit-rootfile20:..file21:.esd-1101file22:shel
1.ofile23:virtual-oracle.IkBDWYfile24:pulse-Hzxq2BylRTji秦晋file25:.shell.o.swp Qin17281251Oracle Linux
6.
55.
1.4显示输入内容用户输入该命令echo后,输入空格,然后输入需要显示的内容,即可在下一行显示上述用户希望输出的内容并回车换行如图5所示QinRcho hel]oworldIhelloworld I秦晋Qin|17281251Oracle Linux
6.5使用帮助用户输入该命令help后,然后显示本命令解释程序的合法命令及其具体的功能说明如图6所不Qinhelp******************************************************/*Is catalogdisplay fileunder thispwd displaythe catalogcurrentpath copycopy afile becomesa newfilerename renamea fileW*nn5R a17281251echocontent printalinecontentOracle Linux
6.5help displayinstructionsjobs displayprocessnameandpid...env display environmentvariableexport varilablename=value setenvironmentvariablequit.exit exitproduce/********************************女女*********************Qin
5.
1.6退出程序用户输入该命令exit/quit后,显示“thank youforusing!bye”,之后该命令解释程序(Shell)退出到Linux操作系统上的原命令解释程序Shello如图7所示fainexit|thank youror using!bye*tmp]*./shell.oQjnquit I秦晋thankyouror using!bye*17281251[root@testl tmp]#Oracle Linux
6.5图
76.
1.7设置和初始化系统环境变量此处略,详见下文
5.4系统环境变量支持中的说明采用直接调用的内部命令
5.
25.
2.1文件拷贝用户输入该命令copy后,然后显示u pleaceinputthefilename tobecopied:,用户输入需要复制的文件的文件名,然后显示“pleaceinputthenewfilename:,用户输入新拷贝文件的文件名,即可完成文件的拷贝再次输出该目录下文件,可见文件已经被拷贝,如图8所示Qincopypleace inputthefilenametobecopied:shell
3.cpleace inputthenewfilename:shell.cco”thenewfilesuccess!QinIs/tmpfile1:.esd-0file3:pulse-DbopTk5mleWFfile4:virtual-root.49uq9Zfile5:pulse-U81rl6dr7ucyfile6:.Xll-unixfile7:,file8;virtual-rpot.oZgJOp9:shell
3.cIfile fileroot.1491,4123,file12:testfile13:.XO-lockIfile11:Ehell.7file14:keyring-scFnMDfile15:.ICE-unixfile16:vi rtual-root.oyfyA4file17:testlfile18:vi rtual-root.411L08file19:orbit-gdmfile20:orbit-rootfile21:..file22:.esd-1101file23:shell.ofile24:virtual-oracle.1kBDWY去nnfile25:pulse-Hzxq2BylRTji案S3Qin17281251Oracle Linux
6.5外部命令
5.
35.
3.1显示环境变量用户输入该命令environ后,然后显示出所有的系统环境变量,每行显示一个部分输出结果如图9所示Qinenviron HOSTNAME=testlTERM=xtermSHELL=/bin/bashHISTSIZE=1000SSH-CLIENT=
192.
168.
125.10510522QTDIR=/usr/lib64/qt-
3.3OLDPWD=/rootQTINC=/usr/lib64/qt-
3.3/includeSSH_TTY=/dev/pts/0USER=rootLS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=4O;33;01:cd=40;33;01:or=40;31w=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.dz=Ol;31:*.gz=Ol;31:*.lz=Ol;31:*.xz=Ol;31:*.bz2=Ol;31:*.tbz=Ol;31:*.tbz2=Ol;31:*.bz=Ol;31:*.tz=ace=01;31:*.zoo=01;31:*.cpio=01;31*.7z=01;31:*.rz=01;31:*.jpg=01;35*.jpeg=01;35:*.gif=01;35*.bir*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:1;35;*.mkv=01;35:*.ogm=01;35*.mp4=0135:*.m4v=01;35*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;=01;35*.avi=01;=01;35*.flv=01;35:*.ql=01;35:*.dl=01;35*.xcf=01;35*.xwd=01;35:*.yuv=01;=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.fTac=01;36:*.nrid=01;36:*.midi=01;36:*.mka=01;36:*•叩3=xa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:MAlL=/var/spool/mai1/rootPATH=/usr/li b64/qt-
3.3/bi n:/usr/1ocal/sbi n:/usr/1ocal/bin:/sbi n:/bi n:/usr/sbi n:/usr/bi n:/root/bi nPWD=/tmp LANG=en_US.UTF-8SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass HISTCONTROL=ignoredups17281251SHLVL=1OracleLinux
6.5。