myshell设计文档资料_第1页
myshell设计文档资料_第2页
myshell设计文档资料_第3页
myshell设计文档资料_第4页
myshell设计文档资料_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

myshell设计文档

——杨逸飞3150104662

一、使用说明

1.将myshell文件及内所有文件(myshell.c、utility©builtin.c、script©、

assign.c、init.c、signal.c、myshell.hvreadmeMakefile)放至主目录

下。

2.在shell命令行输入"make:

3.在shell命令行输入"./myshell",即可运行myshell。

二、功能描述

(-)内建命令

1.cd:更改当前工作目录

2.echo:显示字符串

3.exec:调用并执行指定的命令

4.exit/quit:退出myshell

5.pwd:以绝对路径方式显示用户当前工作目录

6.time:获取程序的执行时间

7.umask:设置限制新建文件权限的掩码

1)umask:显示掩码

2)umasknew_mask:设置新掩码

8.shift:左移参数

1)shift:左移一位

2)shiftn:左移n位

9.test:检查文件和比较值

1)test[options]file:检查文件属性

options:

-b:判断文件是否为块特殊文件

-c:判断文件是否为字符特殊文件

-d:判断文件是否为目录文件

-e:判断文件是否存在

-f:判断文件是否为普通文件

-g:判断文件是否设置了SGID位

-G:判断文件是否存在且归该组所有

*:判断文件是否设置了sticky位

-0:判断文件是否存在且归用户所有

-r:判断文件是否可读

-u:判断文件是否设置了SGID位

-w:判断文件是否可写

-X:判断文件是否可执行

2)testnum1[options]num2:比较整数大小

options:

-eq:num1=num2

-ge:num1>num2

-gt:num1>num2

-Ie:num1<num2

-It:num1<num2

-ne:num1*num2

3)test-nstring:判断字符串是否非零

4)test-zstring:判断字符串是否为零

5)test“str1”=“str2”:判断字符串是否相等

6)test"strl"!="str2”:判断字符串是否不等

10.continue:未达到循环结束条件时强制跳出循环

11.set:显示环境变量或设置myshell特性

options:

-a:设置变量为环境变量

-t:执行完该命令后退出myshell

-v:显示myshell所读取的输入值

-X:显示命令及其后的参数的内容

+v:取消显示myshell所读取的输入值

+x:取消显示命令及其后的参数的内容

12.unset:删除环境变量

13.jobs:显示任务列表及任务状态

14.bg:恢复执行指定JoblD的被挂起的进程

15.fg:把指定JoblD的进程转到前台执行

16.clear:清屏

17.environ:列出所有的环境变量

18.help:显示用户手册

19.about:显示当前shell相关信息

(二)变量赋值

myshell允许变量赋值,所赋值的变量会被存储,可通过“$变量名”调用变量

用法示例:a=xyz

用法说明:把字符串“xyz”赋值给变量a

(三)执行命令行脚本

myshell调用指定的批处理文件,这个批处理文件包含一组命令集,并从该

文件中提取命令行输入,执行所包含的命令。命令集后可添加所传递的参数,

执行过程中会予以替换。当执行到文件结尾时退出执行,并返回命令行提示

符。

用法示例:myshellbatchfilearg1arg2...

用法说明:batchWe为命令行脚本,arg为传递的参数。若myshell后未加

任何参数,则提示需要输入文件名参数。

(四)重定向

myshell支持I/O重定向,stdin和stdout,或者其中之一。

使用输出重定向时,如果重定向字符是〉,则创建输出文件,如果存在则覆

盖之;如果重定向字符为>>也会创建输出文件,如果存在则添加到文件尾。

输出重定向所支持的命令:

内建命令:about、umask、help、environ、echo

外部命令:dir等所有可执行的外部命令

用法示例:programnamearg1arg2<inputfile>outputfile

用法说明:使用arg1和arg2执行程序programname,输入文件流被替

换为inputfile,输出文件流被替换为outputfile

(五)后台执行

myshell支持后台程序执行,如果在命令彳丁后添加&字符,在加载完程序后需

要立刻返回命令行提示符。

用法示例:command&

用法说明:command所执行的命令将会在后台进行

(六)管道

myshell支持管道操作

用法示例:commandl|command2

用法说明:command1的输出将作为command2的输入

(七)其他命令

其他的命令行输入被解释为程序调用,shell创建并执行这个程序,并作为

自己的子进程。程序的执行的环境变量包含以下条目:

parent=<pathname>/myshello

三、模块实现

(一)程序框架

1.数据结构

宏定义:

TRUE1

STATE10

MAX_PIDTABLE1024

MAX_LEN1024

MAX_NAME256

MAX_PATH256

MAX_LINE256

MAX_ARG20

MAX_SCRARG9

T_RUEprintf("True\n");

F_ALSEprintf("False\n");

BACKGROUND1

IN_REDIRECT2

OUT_REDIRECT4

OUT_REDIRECT_APPEND8

IS.PIPED16

后台进程表:BPTable[MAX_PIDTABLE]

structBPT

pid_tpid;

charstate[STATE];

}

变量表、脚本变量表:var[MAX_LINE],script_var[MAX_SCRARG]

structvariable

intflag;

charname[MAX_LINE];

charvalue[MAX_LINE];

)

特殊信息存储(后台、管道、重定向、重定向目标文件、处理后命令名

和参数):info

structparse_info

(

intflag;

char*in_file;

char*out_file;

char*command2;

char**parameters2;

)

set命令信息存储:Set

structset_info

(

intset_v;

intset_x;

)

2.函数原型及功能

voidtype_prompt();

显示命令行提示符

intread_command(char**command,char"parameters);

输入命令并处理为命令名和参数

intparse_info_init(structparse_info*info);

初始化特殊信息存储

voidparsing(char**parameters,intParaNum,structparsejnfo*info);

分析后台、管道、重定向语法

voidsig_handler(intsig);

子进程退出信号处理

voidsig_handler_Z();

Ctrl-Z键进程挂起信号处理

intbuiltin_redirect(char*command,char**parameters);

内建命令(可重定向)

intbuiltin_n_redirect(char*command,char**parameters);

内建命令(非重定向)

voidscript(char*command,char**parameters);

命令行脚本处理

intrun_script();

命令行脚本单条命令执行

voidset_init();

set命令信息存储初始化

voidvariable_init();

变量表初始化

voidscript_variable_init();

脚本变量表初始化

voidBPT_init();

后台进程表初始化

intcheck_assignment();

检查变量赋值语句

3.程序执行流程

1)执行可执行文件myshell后,添加环境变量

shell=<pathname>/myshello

2)调用BPT_init()函数,初始化后台进程表。

3)调用signal。函数检测SIGCHLD,若有子进程退出,进入子进程退

出处理函数。

4)进入while死循环,以下流程循环执行,直到用户输入exit或quit

退出。

5)调用read_command()函数,用户输入命令,命令被处理为命令名及

参数。

6)调用parsing。函数,进一步处理命令,获取后台、管道、重定向相

关信息。

7)调用builtin_n_redirect()函数,执行非重定向的内建命令。若返回值

为1,则进行下一次循环

8)若info中含管道标志,则建立管道。

9)创建子进程1。

父进程中:

a.调用signal。函数检测SIGTSTP(Ctrl-Z键)

b.若info中含管道标志,创建子进程2o

子进程2中调用signal。函数检测SIGTSTP(Ctrl-Z键),调用

dup2()函数重定向管道读端为stdin,调用execvp()函数执行经

parsing。处理过的管道命令1(命令名command2、参数

parameters2卜

第一级子进程中调用waitpid()函数等待子进程2,使用参数

WUNTRACED(若子进程2暂停,立即返回至父进程卜

c.若info中含后台标志,打印此后台进程pid,并在后台进程表

BPTable口中添加该进程,不等待子进程2。若info中无后台标志,

则调用waitpid()等待子进程2,使用参数WUNTRACED(若子进

程2暂停,立即返回至父进程卜

子进程中:

a.若info中含有管道标志而不含有输出重定向标志,调用dup2()函

数重定向管道写端为StdOUto

b.若info中既含有管道标志又含有输出重定向标志,关闭管道读写

端,调用dup2()函数重定向输出端为目标文件。ut_fd。

c.若info中含有输出重定向标志而不含有管道标志,仅调用dup2()

函数重定向输出端为目标文件out_fdo

d.若info中含有输入重定向标志,调用dup2()函数重定向输入端为

目标文件in_fd。

e.调用builtin_redirect()函数,执行可重定向的内建命令,执行完毕

后结束子进程1。

f.若命令名为"myshell",调用script。函数执行命令行脚本,执行完

毕后结束子进程1。

g.若子进程仍未结束,则调用execvp()函数执行管道命令2

(command,parameters若无管道,即为原始命令卜

(二)内建命令

1.cd:更改当前工作目录

命令名为cd时,首先创建字符指针ccLpath。

1)若参数1为空指针,则将参数1修改为字符串“Y

2)若参数1以开头,则将当前工作目录pwd->dir复制给cd_patho

若参数1在字符'后还有内容,则将之后的字符串连接在cd_path

之后。

3)若参数1不以'~'开头,则将参数1直接复制给cd_patho

获得ccLpath之后,调用函数chdir(ccLpath)实现当前工作目录的更改。

最后释放ccLpath指针,并返回整数1O

2.echo:显示字符串

echo虽然为内建命令,但系统在外部命令也有实现,不过需要我们调整

传入的参数,实现变量替换。

从参数1开始搜索之后的所有参数,若发现参数i含有字符$,则保存$

之前的字符串,提取‘$'之后的字符串。

1)首先在变量表var□中搜索,若有相同名称的变量存在,则用改变量

的值替换$之后的字符串,连接到$之前的字符串之后,形成新的参

数i。

2)若$后的字符串长度为1且为0-9之间的数字,则继续在脚本变量表

script_var[]中搜索,查看对应数字是否有变量存在,若存在则用值

替换掉$之后的内容。这一步骤在执行脚本命令行中得以体现。

变量替换完成后,调用execvp()函数调用echo的外部命令实现字符串显

小。

最后返回整数1。

3.exec:调用并执行指定的命令

命令名为exec时,首先初始化清空script_command中的内容。

然后从参数1开始,将其及之后的参数连接在script_command中,中间

用空格隔开,这样就形成了去掉exec的之后的命令内容。

将script_flag设置为1,并调用run_script()函数执行script_command

中的内容。

执行完成后将script_flag设置为0,并返回整数1.

4.exit/quit:退出myshell

命令名为exit或quit时,调用exit(O)直接退出myshell工作进程

5.pwd:以绝对路径方式显示用户当前工作目录

pwd可直接调用execvp()函数实现,因此其在外部命令中实现。

6.time:获取程序的执行时间

time可直接调用execvp()函数实现,因此其在外部命令中实现。

7.umask:设置限制新建文件权限的掩码

命令名为umask时,首先检测参数1。

1)若参数1为空,则为显示当前掩码功能。调用umask()函数获得当前

掩码,按照4位8进制数格式输出。

2)若参数1非空,则为设置掩码功能。将参数1中字符串转为8进制

数,在调用umask()函数进行掩码设置。

8.shift:左移参数

命令名为shift时,首先检测参数1o若参数1为空,则设置参数1为字

符串“1”,表示默认左移一位。然后用atoi()函数将参数1转为数字n,再

将脚本变量表script_var[]数组中的元素向前移动n个单位。

9.test:检查文件和比较值

命令名为test时,首先检测参数1o若参数1为“-b:"-c:”-fT-g:"-G:

“K"O“-"u:"-w7"-x中之一,则为判断文件属性功能。定义stat结构

体s,从stat()函数返回值中判断参数2的文件名是否存在。

1)若参数1为“七”,则判断该文件是否为块特殊文件。将s.st_mode和

宏定义S」FBLK做与,若结果等于SJFBLK,则为真,否则为假。

2)若参数1为“-c”,则判断该文件是否为字符特殊文件。将s.st_mode

和宏定义SJFCHR做与,若结果等于SJFCHR,则为真,否则为

假。

3)若参数1为“-d”,则判断该文件是否为目录文件。将s.st_mode和宏

定义S」FDIR做与,若结果等于S」FDIR,则为真,否则为假。

4)若参数1为“-e”,则判断该文件是否存在。若stat()返回值小于0,则

为假,否则为真。

5)若参数1为“-f”,则判断该文件是否为普通文件。将s.st_mode和宏定

义SJFREG做与,若结果等于SJFREG,则为真,否则为假。

6)若参数1为“-g”,则判断该文件是否设置了SGID位。将s.st_mode

和宏定义S」SGID做与,若结果等于S」SGID,则为真,否则为假。

7)若参数1为“-G”,则判断该文件是否存在且归该组所有。将s.st_mode

和宏定义S」SGID做与若结果等于S」SGID且stat()返回值等于0,

则为真,否则为假。

8)若参数1为“-k”,则判断该文件是否设置了sticky位。将s.st_mode

和宏定义S」SVTX做与,若结果等于S」SVTX,则为真,否则为假。

9)若参数1为“-O”,则判断该文件是否存在且归用户所有。将s.st_mode

和宏定义S.IRWXU做与,若结果等于S.IRWXU且stat()返回值等

于0,则为真,否则为假。

10)若参数1为“-r”,则判断该文件是否可读。将s.st_mode和宏定义

S」RUSR做与,若结果等于SJRUSR,则为真,否则为假。

11)若参数1为“-u”,则判断该文件是否设置了SGID位。将s.st_mode

和宏定义S」SUID做与,若结果等于S」SUID,则为真,否则为假。

12)若参数1为“-w”,则判断该文件是否可写。将s.st_mode和宏定义

S」WL)SR做与,若结果等于SJWUSR,贝IJ为真,否则为假。

13)若参数1为“-x”,则判断该文件是否可执行。将s.st_mode和宏定义

S」XUSR做与,若结果等于SJXUSR,则为真,否则为假。

若参数2不为空,且参数2为“-eq';"-ge':"-gt':"-le':"-lt':“-ne^2一,则为

比较整数功能。调用atoi()函数将参数1和参数3转为两个整数并进行按

上述要求比较整数,返回对应的真或假。

若参数1为“-n”,则为判断字符串长度是否非零功能。调用strlen()函数判

断参数2的长度,非零为真,零为假。

若参数1为“-z”,则为判断字符串长度是否为零功能。调用strlen()函数判

断参数2的长度,零为真,非零为假。

若参数1不为空,且在参数1中检测到字符'=’或连续的两个字符“!=”,

则为字符串比较功能。利用'='或"!=”将参数1分割成前后两个新的字符

串,调用strcmp进行这两个字符串的比较,返回真或假。

执行完test命令后,返回整数1。

10.set:显示环境变量或设置myshell特性

命令名为set时,参数1有选项,其他字符串则

会提示参数无效。若参数1为空,则提示缺少参数

1)若参数1为“-a”,则为设置变量为环境变量功能。若参数2为空,则

提示缺少参数。否则从变量表var[]中比较参数2和表中的变量名,

若有相同,则从变量表中获取该变量的值,并调用setenv()函数将其

设置为环境变量。

2)若参数1为“-t”,则为执行完该命令后退出myshell功能。调用exit()

函数退出即可。

3)若参数1为“-v”,则为显示myshell所读取的输入值功能。于是将

Set.set_v设置为1,在读取每条命令后都输出该命令的内容。

4)若参数1为“-x”,则为显示命令及其后的参数的内容功能。于是将

Set.set_x设置为1,在读取每条命令后都输出命令及其后的参数的

内谷。

5)若参数1为“+v”,则为取消显示myshell所读取的输入值功能。于是

将Set.set_v设置为0,在读取每条命令后不再输出该命令的内容。

6)若参数1为“+x”,则为取消显示命令及其后的参数的内容功能。于是

将Set.set_x设置为0,在读取每条命令后不再输出命令及其后的参

数的内容。

执行完set命令后,返回整数1。

11.unset:删除环境变量

命令名为“unset”时,检测参数1O

1)若参数1为“-v”,则为删除变量(包括环境变量)功能。若参数2为

空,则提示缺少参数。之后先从变量表var□中比较参数2和表中的

变量名,若有相同,则设置该变量的var[i].flag为0,清空name和

value的内容。再调用unsetenv()函数将与参数2拥有相同名称的环

境变量删除。

2)若参数1为空,则提示缺少参数。

3)若参数1为其他值,则提示参数无效。

执行完unset命令后,返回整数1.

12.jobs:显示任务列表及任务状态

命令名为“jobs”时,在第一行打印标题,即“JoblD:"Pid:"State”,JoblD为

后台进程表的序号,pid为进程号State表示进程“Running”或“Stopped';

然后从后台进程表BPTable□寻找后台进程并打印这些信息。

13.bg:恢复执行指定JoblD的被挂起的进程

命令名为“bg”时,首先检测参数1o若参数1为空,则提示缺少参数。

满足条件,则将参数1用atoi()转为数字,在后台进程表BPTable□检查

该工作号的进程,若不存在,则提示没有此工作。

若存在则调用kill()函数向该进程号发送SIGCONT信号使其继续执行,

并修改该进程的State为“Running”,最后返回整数1。

14.fg:把指定JoblD的进程转到前台执行

命令名为“fg”时,首先检测参数1O若参数1为空,则提示缺少参数。

满足条件,则将参数1用atoi()转为数字,在后台进程表BPTable"检查

该工作号的进程,若不存在,则提示没有此工作。

若存在则调用kill()函数向该进程号发送SIGCONT信号使其继续执行,

并调用wa让pid()函数让父进程等待子进程结束,即实现后台进程转为前

台执行。

执行完毕后,删除工作表中该工作号的进程信息,返回整数10

15.clear:清屏

clear可直接调用execvp()函数实现,因此其在外部命令中实现。

16.environ:列出所有的环境变量

命令名为"environ”时,定义外部变量char"environ,循环输出environ。]

所指向的字符串,直到为空。

17.help:显示用户手册

命令名为“help”时,以只读形式打开文件“readme:定义字符数组buf,

长度为MAX,LINE,循环从readme文件中读MAX_LINE长度的字符串

并输出,直到读取到'\0',停止循环。

可使用命令"help|more”对信息进行过滤。

18.about:显示当前shell相关信息

显示:Thisisasimulationofshell(bash)inLinux.

(三)外部命令

原始命令在读取命令函数read_command()中处理为命令名*command和

参数**parameters后,在通过语法分析函数parsing。获取后台、管道、重

定向、重定向目标文件等信息后,过滤为新的命令名*command2和参数

**parameters2o

若存在管道,则用处理过的命令名和参数调用execvp(command2,

parameters2);不存在则用原始的命令名和参数调用execvp(command,

parameters),实现外部命令的执行。

(四)后台处理

通过parsing。函数分析是否含有后台标志。若含有,则向后台进程表添加进

程信息,且父进程不等待子进程结束;否则父进程等待子进程结束。

(五)管道处理

通过parsing。函数分析是否管道标志。若含有,则新建管道。父进程关闭管

道写端,调用dup2()函数重定向管道读端为stdin;子进程关闭管道读端,

调用dup2()函数重定向管道写端为stdouto

(六)重定向处理

通过parsing。函数分析是否含有重定向标志。若含有输入重定向标志,则在

子进程中用dup2()函数重定向输入端为目标文件in_fd;若含有输出重定向

标志,则在子进程中用dup2()函数重定向输出端为目标文件out_fd。根据输

出是覆盖原有内容还是末尾续写,选择参数为O_TRUNC或O_APPEND。

(七)执行命令行脚本

命令名为myshell时,调用script()函数执行命令行脚本。执行完毕后退出

子进程。

(八)其他命令

其他命令被视为程序调用,myshell创建子进程来执行这个程序

(九)重要函数功能实现

1.voidtype_prompt()

首先创建passwd型结构体指针pwd,通过函数getuid()获取用户uid,

再通过函数getpwuid获取用户uid对应的passwd结构,赋值给pwd。

通过pwd->pw_name可获取用户名,通过pwd->pw_dir可获取主目录。

再通过gethostname()函数获取主机名,通过getcwd()函数获取当前路径,

若当前路径字符串包含主目录,则用‘〜'代替之。

最后通过geteuid()检测用户是否为root账号,对应于提示符的最后一个

字符为‘#'或$,并按照“用户名@主机名:路径$”或‘用户名@主机名:路径#”

的形式输出。

2.intread_command(char**command,char**parameters)

——输入命令并处理为命令名和参数,返回值为参数个数

首先获取命令。若script_flag为1,则表示此过程为命令行脚本中的命令

或exec命令中所执行的命令,此时命令已存入buffer"中;若script_flag

为0,则由用户从输入端输入命令于buffer口中。

若命令为空则返回-1。调用check_assignment()检测是否为变量赋值命

令,若返回值为1则表明是变量赋值是变量赋值命令,返回

若命令中有空格或制表符,将所有空格及制表符用‘\0'替换,形成一个个

小的字符串。

然后用这些小字符串的头指针给parameters□分别赋值,获得命令的参

数。parameters[。]为命令名,将其赋值给command。同时count记录参

数个数,作为返回值。

3.voidparsing(char**parameters,intParaNum,structparse_info*info)

——分析后台、管道、重定向语法

首先检测传入的最后一个参数,若为“&”,则在info中添加后台标志,并

删除该参数。

然后对其他参数逐个处理,若参数为或“>>”,则在info中添加重定

向标志和重定向目标文件,并删除该参数。若参数为T,则在info中添加

管道标志,将该参数之后的参数赋值给info->command2和

info->parameters2o

4.voidsig_handler(intsig)

——子进程退出信号处理

对后台进程表中的每个进程,调用waitpid()函数,第三个参数采用

WNOHANG(结束返回进程号,未结束返回0b若返回值大于0,则输

出该进程号的进程退出的提示信息,并在后台进程表中删除该进程。

5.voidsig_handler_Z()

——Ctrl-Z键进程挂起信号处理

当接收到按键信息后,先记录当前进程的pid,再进入本函数。

本函数中,根据先前记录的pid,调用kill()函数,向该进程发送SIGSTOP

信号,使其暂停,并在后台进程表中添加该进程,state为“Stopped:

6.voidscript(char*command,char**parameters)

——命令行脚本处理

1)将script_flag设为1,并调用script_variable_init()初始化脚本变量表。

2)将命令行所传递的脚本参数添加到脚本参数表中。

3)检测脚本文件名。若未输入,则提示缺少参数;调用open。函数检

测文件是否存在,若返回值为-1,则输出错误信息。

4)满足上述条件后,获取文件内容到字符串buf□中。

5)for循环检测buf口中的每一个字符。若为则表示注释信息,用‘\0'

替换之;若为换行符,则表示该条命令结束,用‘\0'替换之,并将该

条命令复制给script_command□。再调用run_script()执行单挑命令。

6)字符检测完成,即所有命令已全部执行,最后将script_flag设回0。

7.intrun_script()

——命令行脚本单条命令执行,有返回值则表示该条指令已经执行

完毕。

该函数在main()函数复制的基础上修改完成。由于是单条执行命令,因

此去掉了while无限循环。其他和主流程保持一致

8.intcheck_assignment()

——检查变量赋值语句

1)首先检测命令中是否含有字符‘二若不含有,则返回Oo

2)若含有,则按照'='划分为两个新字符串,分别存入name和value。

若name中有空格,则表示该命令'='不在第一个参数,即不是变量赋值

命令,返回Oo

3)若name中没有空格,则在变量表中检测是否已经存在变量名与

name相同的变量。若有,则覆盖之;若没有则添加name和value到变

量表中。返回1o

四、运行结果

(—)进入myshell

yyfyyf123123@yyf:./myshell

yyfyyf1231230yyf:~$,

(二)内建命令

1.cd:

yyfyyfl23123@yyf:*$./myshell

yyfyyf1231230yyf:*$cdfl

yyfyyfl231230yyfcdf2

yyfyyfl23123gyyf:*/fl/f2$cd..

yyfyyf123123@yyf:*/f1$cd

yyfyyf1231230yyf:*$cdLINUX_homework/project2/shell4

yyfyyf1231230yyf:*/LINUX_homework/project2/shell4$cd..

yyfyyf1231230yyf:*/LINUX_honework/project2$cd

yyfyyfl231230yyf:*$|

2.echo:

yyfyyf1231230yyf:~5echo-ehello\tworld

helloworld

yyfyyf1231230yyf:~$var=123

yyfyyf1231230yyfabc=456

yyfyyf1231230yyf:~$echo$var$abcqwer

123456qwer

yyfyyf123123ayyf:~$echoThisismyshell!

Thisismyshell!

yyfyyf123123gyyf:~$

3.exec:

yyfyyfl231230yyf:-$exececho3456

3456

yyfyyfl23123@yyf./myshell

yyfyyfl231230yyf:-$execIs-a

*

DesktopMusic,sudo_as-admtn_successful

・•.dmrcmyshellTemplates

1Documentsnyshell.ctnp

2DownloadsMyshell.ctmpl

assign.cexamples.desktopnyshell.hutility.c

.bash_htstoryflPicturesVideos

.bash-logout・ICEauthortty.profile.vintnfo

.bashrctntt.cPublicvmware-tools-dtstrib

butltin.cLINUX_homeworkreadme.Xauthortty

.cache.localscript.c.xsesston-errors

.configMakefilesignal.c.xsesston-errors.old

yyfyyfl23123@yyf:-$

4.exit、quit:

yyfyyfl231230yyf:~$./myshell

yyfyyf1231230yyf:~$exit

yyfyyf1231230yyf:~$./myshell

yyfyyfl231230yyf:~$quit

yyfyyf123123flyyf:~$

5.pwd:

yyfyyfl231230yyf:*$pwd

/home/yyfyyf123123

yyfyyfl23123@yyf:~$cdfl/f2

yyfyyf123123@yyf:*/f1/f2$pwd

/home/yyfyyf123123/fl/f2

yyfyyf123123@yyf:*/fl/f25cd

yyfyyfl231230yyf:*$cdLINUX_homework/project2/shell4

yyfyyfl231230yyf:~/LINUX_homework/project2/shell4$pwd

/home/yyfyyf123123/LINUX_homework/project2/shell4

yyfyyfl231230yyf:*/LINUX-homework/project2/sheH4$|

6.time:

Iyyfyyfl23123§yyf:-$timeecho3

3

0.60user0.66systeme:00.O0elapsed?%CPU(0avgtext+6avgdata2672maxrestdent)k

Olnputs-**Ooutputs(0major+81ntnor)pagefaultsOswaps

yyfyyf123123gyyf:*$timemake

gcc-cnyshell.c-onysheH.o

Igcc-cutility.c-outility.o

Igcc-cbutltin.c-obutltin.o

:gcc-cscript.c-oscript.o

Igcc-cassign.c-oassign.o

Igcc-ctntt.c-otntt.o

gcc-csignal.c-osignal.o

gcc-omyshellmyshell.outility.obutltin.oscript.oassign.otntt.osignal.o

0.52usero.iosysteme:oi.zselapsed35%CPU(eavgtext+eavgdata24928maxrestdent)k

0tnputs+376outputs(Onajor+26248mtnor)pagefaults©swaps

yyfyyfl231230yyftimemakeclean

rn-f*.o

O.OOuser©.©©systeme:O6.0Oelapsed0%CPU(Oavgtext*Oavgddtd2676maxrestdent)k

0tnputs+6outputs(6major+331mtnor)pagefaultsOswaps

VVf"fl231,230VVf:~$__________

7.umask:

yyfyyf1231230yyf:~$umask

0022

yyfyyf123123gyyf:-$umask111

yyfyyfl23123@yyf:~$umask

0111

yyfyyf1231230yyfumask031

yyfyyf1231230yyfumask

0031

yyfyyfl23123@yyf•________

8.shift:命令:shift

yyfyyf1231230yyfcat1

pwd#sdssd

who#sdsd

date#sdsd

al=12

bl=56

echo$al$bl$1$2$3

shift

echo$al$bl$1$2$3

yyfyyf1231230yyf:~$a=999

yyfyyf1231230yyf:~$b=888

yyfyyf1231230yyfC=777

yyfyyfl231230yyf:~$d=666

yyfyyf1231230yyf:~$myshell1abcd

/home/yyfyyf123123

yyfyyfl23123tty72017-07-2822:27(:0)

2017年08月050星期六21:02:38CST

1256999888777

1256888777666

命令:shift3

yyfyyfl231230yyf:-$cat1

echo$1$2$3$4

shift3

echo$1$2$3$4

yyfyyf1231230yyf:~$a=x

yyfyyf1231230yyfb=y

yyfyyf1231230yyfc=z

yyfyyf1231230yyf:~$d=xx

yyfyyfl231230yyfe=yy

yyfyyf1231230yyff=zz

yyfyyf1231230yyfg=xxx

yyfyyf1231230yyf:~$h=yyy

yyfyyf1231230yyfi=zzz

yyfyyf123123gyyf:~$nyshelllabcdefghi

xyzxx

xxyyzzxxx

9.test:

1)检查文件属性

yyfyyf123123gyyf:~$test-bfl

False

yyfyyf1231230yyftest-dfl

True

yyfyyf1231230yyftest-wnyshell

True

yyfyyf1231230yyftest-xnyshell.o

False

yyfyyf1231230yyftest-unyshell.c

False

2)比较整数大小

yyfyyfl231230yyf:~$test45-eq55

False

yyfyyf1231230yyftest54-eq54

True

yyfyyfl231230yyf:"$test123-gt65

True

3)判断字符串是否非零、为零

yyfyyf1231230yyftest-n456

True

yyfyyf1231230yyf:-$test-z456

False

4)判断字符串是否相等、不等

yyfyyfl231230yyftest4567sd=4567sd

True

yyfyyf123123gyyf:-$test879!=sda

True

yyfyyfl231230yyftest15651=1565

False

10.set:

1)set-a:

yyfyyf1231230yyf:~$set-af

yyfyyf1231230yyf:~$environ

CLUTTER_IM_MODULE=xtm

LS_COLORS=rs=0:dt=01;34:ln=01;36:nh=ee:pi=40;33:

=4e:33:ei:or=40:31:ei:nt=ee:su=37:41:sa=3e:43:ca

OLDPWD=/home/yyfyyf123123/LINUX_homework/project

shell=/home/yyfyyf123123/myshell

f=zz_

yyfyyfl231230yyf:~$•

2)set-t:

yyfyyfl231230yyfset-t

yyfyyfl231230yyf:〜§■

3)set-v:

yyfyyfl231230yyf:~$set-v

yyfyyf1231230yyfecho3

echo3

3

yyfyyfl23123@yyf:~$Is-a

Is-a

..configMusicsignal.o

..Desktopnyshell.sudo_as_admi

1.dmrcnyshell.cTemplates

111DnriimAntcMwchol1r十me

/yfyyf1231230yyfcdfl

cdfl

/yfyyf1231230yyf:~/f1$cd

温馨提示

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

评论

0/150

提交评论