简单shell实现

http://blog.csdn.net/lishuhuakai/article/details/11928055

#include <stdio.h>
#include <unistd.h>
#include <wait.h>
#define MAXLINE 80

void setup (char inputBuffer[], char *argv[])
{

    int i, j;
    char *p;
    i = 0;
    for (p = inputBuffer; ;p++)/*将字符命令一段一段拆分开来,如输入ls -l,则argv[0]= "ls",argv[1]="-l",argv[2]=NULL*/
    {
        argv[i++] = p;
        while (*p != ‘ ‘ && *p != ‘\0‘)
            p++;
        if (*p == ‘\0‘)
        {
            break;
        }
        *p = ‘\0‘;
       }
    argv[i] = NULL;/*最后一个参数须用空指针NULL作结束*/
    execvp (argv[0], argv);/*执行命令,argv[0]放着执行的命令,其余的argv放着参数*/
}

int main()
{

    char inputBuffer[MAXLINE];
    char *argv[MAXLINE / 2 - 1];

    while (1)
    {
        printf ("COMMAND->");
          gets (inputBuffer);/*输入命令*/
        setup (inputBuffer, argv);
                printf ("扑街!");
    }
    return 0;
}
#include <stdio.h>
#include <unistd.h>
//#define SIZE 20
#define MAXLINE 80
char *p;

void setup (char inputBuffer[], char *argv[])
{
    int i, j;
    i = 0;
    for (p = inputBuffer; ;p++)/*一个一个地将输入字符分开*/
    {
        argv[i++] = p;
        while (*p != ‘ ‘ && *p != ‘\0‘)
            p++;
        if (*p == ‘\0‘)
        {
            break;
        }
        *p = ‘\0‘;
       }
    argv[i] = NULL;
    pid_t pid
    pid = fork();/*新建一个子进程*/
    if (pid == 0)/*对于子进程,执行输入的命令*/
    {
     execvp (argv[0], argv);
     printf ("command not found\n");/*如果execvp执行失败的话,会返回-1,也就是这句话会被执行*/
    }

    else if( pid > 0 )/*对于父进程,等待*/
    {
     wait(NULL);/*父进程等待子进程执行完*/
    }

     else /*否则的话,就出错了*/
     {
      printf ("fork error\n");
     }
}

int main()
{
    char inputBuffer[MAXLINE];
    char *argv[MAXLINE / 2 - 1];

    while (1)
    {
        printf ("COMMAND->");
          gets (inputBuffer);
        /*关于scanf和gets,scanf对于输入的字符遇到空格或回车就结束了,而gets对于输入的空格也接受*/
        setup (inputBuffer, argv);

    }
    return 0;
}
时间: 2024-08-27 19:52:01

简单shell实现的相关文章

基于u-boot源码的简单shell软件实现

一.概述 1.shell概念 Shell(命令解析器),它用于接收用户输入的命令,进行解析,然后调用相应的应用程序,为使用者提供了使用软件的界面. shell是操作系统最外面的一层.shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,执行相应的应用程序,并且输出各种各样的处理结果. 2.shell分类 按照界面类型,可以分为图形界面shell和命令行式shell. 图形界面shell(Graphical User Interface shell 即 GUI shell),应

简单shell指令

第一部分 简单的常用指令 1.date命令 date 2.显示日历 cal 3.显示当前目录 pwd  4.切换当前工作目录 默认情况下,超级用户的主目录是/root,而普通用户的主目录是/home下与该用户同的子目录. 超级用户,也就是root用户的显示符号为:# 而普通用户的显示符号为:$ 5.查看文件信息 ls -a 显示所有的文件和子目录,包括隐藏的文件和隐藏子目录,Linux中隐藏文件夹和隐藏子目录都是以“ . ”来开始的. -R 不仅显示指定目录下的文件和子信息目录,而且还递归的显示

简单shell 编程

简单shell编程  by  dreamboy 1 #!/bin/bash 2 while true 3 do 4 echo 5 clear 6 echo 7 echo " 系统维护菜单 " 8 echo "============================ " 9 echo " 1)显示系统日期 " 10 echo " 2)修改系统日期 " 11 echo " 3)显示已登录用户 " 12 echo

【sehll学习】linux运维一个简单shell脚本监控系统内存

学习shell脚本入门后,慢慢要尝试编写一些脚本练练手,在这先简单的学习写个系统内存的监控. 1.首先先要确定一下截取一下需要关注的内存使用值,可使用free 命令来操作 free -m 显示 一般在监控内存是我们都是截取 第三行(-/+ buffers/cache)的值.确定后可以使用管道线和grep命令来获取这个的值. free -m | grep - | awk  '{print $4}' 获取到他的值为  858 当中 grep -  就是匹配一下要选取的内容,不太熟悉的可以学习一下gr

CentOS -简单shell

作业(练习)内容: 1.描述shell程序的运行原理(可附带必要的图形说明): Shell(外壳):交互式进程.编译器,解释器 shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层. 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 面向对象:把整个我们要实现的项目抽象成一个一个的对象并且定义对象之间的动作 面向过程:把编程着源

一个具有菜单选项的简单shell脚本

这是一个简单的shell脚本,里面包含了很多的shell脚本编写技巧,虽然脚本是从别的视频教程里面整理而来,但是对我的以后的编写shell脚本的道路有了一定的铺垫. #!/bin/bash ############# # main menu # ############# main_menu () { echo echo dis_mainmenu="CREATE MINISITE IN CHINAITLAB.COM" curdate=`date "+%Y-%m-%d %T&q

简单 Shell编程学习

世界上对 shell 脚本最好的概念性介绍来自一个老的 AT&T 培训视频 .在视频中,Brian W. Kernighan(awk 中的"k"),Lorinda L. Cherry(bc 作者之一)论证了 UNIX 的基础原则之一是让用户利用现有的实用程序来定制和创建复杂的工具. 用 Kernighan 的话来说:"UNIX 系统程序基本上是 -- 你可以用来创造东西的构件.-- 管道的概念是 [UNIX] 系统的基础:你可以拿一堆程序 -- 并将它们端到端连接到一

简单shell脚本入门了解

一.Shell脚本 脚本:可以执行文件,运行后可以实现某种功能(命令的堆积,非交互) 规范Shell脚本的一般组成 #! 环境声明(Sha-Bang) # 注释文本 可执行代码 二.简单写一个shell脚本,按照国际惯例,还是输出hello world [[email protected] ~]# vim /root/1.sh #!/bin/bash echo hello world [[email protected] ~]#  chmod +x /root/1.sh [[email prot

自己敲过的一些简单shell脚本

敲过的一些简单脚本,把他们贴上来偶尔看看,过不了多久应该就会觉得非常小儿科吧,不过应该会对shell脚本的流程控制理解有些帮助. #!/bin/bash//p=176.202.52.////for i in $(seq 1 254)//for ((i=1;i<=5;i++))//do// ping -c2 -i0.1 -w1 $p$i &> /dev/null//if [ $? -eq 0 ];then// echo "$p$i neng ping tong "//

Hbase的一些简单shell命令

进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 hbase(main)> whoami 表的管理1)查看有哪些表 hbase(main)> list 2)创建表 # 语法:create <table>, {NAME => <family>,