//命令分割函数
void Strtok_cmd(char*buff,char*myargv[])
{
char *s=strtok(buff," "); //分割输入的字符串
if(s==NULL)//如果s为空,则进入下一轮循环
{
exit(0);
}
myargv[0]=s; //把分割出来的第一个字符串放在myargv[0]中
int i=1;
while((s=strtok(NULL,""))!=NULL) //把后续分割出来的字符串依次存放在数组中
{
myargv[i++]=s;
}
}
//===============================================================
int main()
{
while(1)
{
char buff[128]={0};
Printf_Info();
//从终端获取命令存入buff中
fgets(buff,128,stdin);
buff[strlen(buff)-1]=0;
char *myargv[MAX]={0};
//分割输入的命令
Strtok_cmd(buff,myargv);
//如果输入exit则退出循环
if(strcmp(myargv[0],"exit")==0)
{
exit(0);
}
//如果分割出来的第一个字符串为cd
else if(strcmp(myargv[0],"cd")==0)
{
Mycd(myargv[1]);
continue;
}
//若是系统调用,直接替换fork+exec
pid_t pid=fork();
assert(pid!=-1);
if(pid==0)
{
char path[256]={0};
if(strncmp(myargv[0],"./",2)!=0strncmp(myargv[0],"/",1)!=0)
{
//先把路径放入path中
strcpy(path,PATH);
}
//进行命令拼接,路径+名称
strcat(path,myargv[0]);
//替换进程 例如:/bin/ls
execv(path,myargv);
perror("\033[;31mexecv error\033[0m");
}
//处理僵死进程
else
{
wait(NULL);
}
}
}
运行结果如下 :
异常处理如下:
若是第一次运行程序 , 则不能使用cd - 命令,因为此时还没有历史路径
若进入一个不存在的目录则会报错,没有这个文件或目录
若直接输入一个不存在的无法识别的命令,也会报错 。
bash(shell)命令解释器,Linux界面介绍Linux bash命令行:bash命令行解释器或者翻译官,命令行输入命令都是由bash解释执行的 。
一、命令行
二、查询当前登录的用户:
root
三、查询当前用户主机名:
oldboy
四、查询当前用户所在的路径:
/root
五、切换用户:
#切换到oldboy用户
(#$是普通用户的提示符 。一般大臣,布衣 。)
oldboy
六、符号的意思
~用户家目录
-上一次所在的目录
.表示当前目录
..上一级目录
../..表示上一级的上一级目录
LINUX快速入门第八章:Shell基础 我们平时所说的 Shell 可以理解为 Linux 系统提供给用户的使用界面 。Shell 为用户提供了输入命令和参数并可得到命令执行结果的环境 。当一个用户登录 Linux 之后,系统初始化程序 init 就根据 /etc/passwd 文件中的设定,为每个用户运行一个被称为 Shell(外壳)的程序 。
确切地说,Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至编写一些程序 。
Shell 处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用 。图 1 是 Linux 系统层次结构图,Shell 接收用户输入的命令,并把用户的命令从类似 abed 的 ASCII 码解释为类似 0101 的机器语言 , 然后把命令提交到系统内核处理;当内核处理完毕之后,把处理结果再通过 Shell 返回给用户 。
换句话说:
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁 。Shell 既是一种命令语言,又是一种程序设计语言 。
Shell 是指一种应用程序,这个应用程序提供了一个界面 , 用户通过这个界面访问操作系统内核的服务 。
推荐阅读
- 什么咪直播,咪蒙直播软件
- 电商如何退定金,电商如何退定金给客户
- 游戏里动作的专利,游戏动作算不算抄袭
- python函数多行代码 python命令行输入多行代码
- C语言基础学习机和ipad,c语言基础题库及详解答案
- thinkphp手动记录日志,php如何记录日志
- 虚拟机不能加什么硬盘系统,虚拟机不能装系统
- vb.net计算大型数组 vb计算数组元素个数
- 华为网络机顶盒怎么看电视直播,华为网络机顶盒怎么看电视直播频道