版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年粤教新版九年级历史上册月考试卷含答案
- 2025年中图版选择性必修3历史上册月考试卷含答案
- 2025年沪教版八年级历史下册阶段测试试卷含答案
- 二零二五年度出租车行业驾驶员安全责任合同范本4篇
- 二零二五年度出租车公司车辆调度合同3篇
- 房屋赠与合同范本(2篇)
- 2025年度农机保险代理销售合同范本4篇
- 2025年度智能门禁系统数据安全保护合同6篇
- 2025年度数据中心基础设施承包施工合同3篇
- 二零二五版汽车牌照出租代理服务合同范本2篇
- 蛋糕店服务员劳动合同
- 土地买卖合同参考模板
- 2025高考数学二轮复习-专题一-微专题10-同构函数问题-专项训练【含答案】
- 新能源行业市场分析报告
- 2025年天津市政建设集团招聘笔试参考题库含答案解析
- 岩土工程勘察.课件
- 中餐烹饪技法大全
- 新型电力系统研究
- 滋补类用药的培训
- 北师大版高三数学选修4-6初等数论初步全册课件【完整版】
- 高职《劳动教育》指导纲要
评论
0/150
提交评论