linux中在脚本如何实现空两行,Linux下实现一个简易的shell脚本

文章目录

在Linux系统下咱们都是经过在命令行敲击一些命令来实现一些咱们想要的操做,只要了解一些进程程序替换的知识,咱们也能够本身写一个简易的shell。

#什么是shell 脚本c++

最简单的解释,一个shell 脚本就是一个包含一系列命令的文件。shell 读取这个文件,而后执行文件中的全部命令,就好像这些命令已经直接被输入到了命令行中同样。

Shell 有些独特,由于它不只是一个功能强大的命令行接口, 也是一个脚本语言解释器。咱们将会看到,大多数可以在命令行中完成的任务也可以用脚原本实现,一样地,大多数能用脚本实现的操做也可以在命令行中完成。

因为能力有限,在这里只能实现一个很简单的命令行脚本,并且...bug不少:好比说之间按回车键会出现死循环,好比说第一个字符串不是正确的命令时也不会报错,可是若是是第二个日后的字符串是错误的就会报错....(很神奇,我也不知道为何...还望各路大佬多多指教~)

#怎样编写一个shell 脚本

1.获取命令行

2.解析命令行

3.创建一个子进程

4.替换子进程(execvp)

5.父进程等待子进程(wait)web

#代码shell

#include

#include

#include

#include

#include

int argc=0;

char*argv[32];

//获取命令行字符串

int param_parse(char* buff)

{

if(buff==NULL){

return -1;

}

char* ptr=buff;

char* tmp=ptr;

while((*ptr)!='\0'){

//当遇到空格,而且下一个位置不是空格的时候

//将空格位置置为'\0'

//用argv[argc]来保存这个字符串的位置

if(*ptr==' '&&*(ptr+1)!=' '){

tmp=ptr+1;

}

ptr++;

}

argv[argc++]=tmp;

argv[argc]=NULL;

return 0;

}

函数替换

int exec_cmd()

{

int pid=0;

pid=fork();

if(pid<0){

return -1;

}else if(pid==0){

execvp(argv[0],argv);

exit(0);

}

int statu;

wait(&statu);

//判断子进程是不是代码运行完毕退出

if(WIFEXITED(statu)){

//获取到子进程的退出码,转换为文本信息打印

printf("%s\n",strerror(WEXITSTATUS(statu)));

}

return 0;

}

int main()

{

while(1){

printf("MyShell>");

char buff[1024]={0};

//%[^\n]获取数据直到遇到\n为止

//%*c 清空缓冲区,数据都不要了

scanf("%[^\n]%*c",buff);

printf("%s\n",buff);

argc=0;

memset(argv,0,sizeof(argv));

param_parse(buff);

exec_cmd();

}

return 0;

}

41c14dba60decf36ef53370e86c58cc1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值