编程实现linux下的shell

/*************************************************************************
    > File Name: Kris_shell.c
    > Author: KrisChou
    > Mail:[email protected]
    > Created Time: Thu 21 Aug 2014 04:31:55 PM CST
 ************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/wait.h>

#define PROMPT ">>"
#define ARG_CNT 32

void command_to_arglist(char** arglist,char *cmd_line);
int main(int argc, char *argv[])
{
    char cmd_line[1024];
    char *arglist[ARG_CNT];
    while(memset(cmd_line,0,1024), printf("%s",PROMPT), fgets(cmd_line,1024,stdin))
    {
        if(cmd_line[0] != ‘\n‘)
        {
            cmd_line[strlen(cmd_line) - 1] = ‘\0‘; //将读进来的换行符变成‘\0‘
            command_to_arglist(arglist,cmd_line);
            if(fork() > 0)
            {
                wait(NULL);
            }else
            {
                execvp(arglist[0],arglist);
                exit(0);
            }
        }
    }
    return 0;
}

static int my_isspace(char c)
{
    if(c == ‘ ‘|| c == ‘\n‘ || c == ‘\t‘ || c ==‘\v‘)
        return 1;
    else
        return 0;
}
static void command_to_arglist(char** arglist,char *cmd_line)
{
    int cnt = 0;
    int bg,end;
    bg = 0;
    while(cmd_line[bg] != ‘\0‘)
    {
        while(my_isspace(cmd_line[bg]))
        {
            bg++;
        }
        if(cmd_line[bg] == ‘\0‘)
        {
            break;
        }
        end = bg;
        while(cmd_line[end] != ‘\0‘ && !my_isspace(cmd_line[end]))
        {
            end++;
        }
        arglist[cnt] = (char*)calloc(1, (end-bg+1));
        strncpy(arglist[cnt],cmd_line+bg,(end-bg));
        cnt++;
        bg = end;
    }
    arglist[cnt] = NULL;

}

编程实现linux下的shell

时间: 2024-11-07 11:24:17

编程实现linux下的shell的相关文章

Linux下的shell编程入门

通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者shell脚本来实现. 一.简介 Shell编程有很多类似C语言和其他程序语言的特征,但是又没有编程语言那样复杂.Shell程序就是放在一个文件中的一系列Linux命令和实用程序,在执行的时候,通过Linux一个接着一个地解释和执行每个命令. 下面我们来看一个简单的shell程序: 1.首先建立一个

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句

Linux下的shell脚本编程-变量-算术表达式-判断语句-if分支语句 一:实验环境 1):虚拟机 2):linux系统 二:实验目标 1): shell 基本语法 2):变量 3):表达式 4):判断语句 5): if表达式 三:实验脚本 第一块 一个简单的shell脚本程序 [[email protected] ~]# mkdir test [[email protected] test]# vim example1.sh #!/bin/bash #This is to show wha

linux下的shell命令的编写,以及java如何调用linux的shell命令(java如何获取linux上的网卡的ip信息)

程序员都很懒,你懂的! 最近在开发中,需要用到服务器的ip和mac信息.但是服务器是架设在linux系统上的,对于多网口,在获取ip时就产生了很大的问题.下面是在windows系统上,java获取本地ip的方法.贴代码: package com.herman.test; import java.net.InetAddress; /** * @see 获取计算机ip * @author Herman.Xiong * @date 2014年5月16日 09:35:38 */ public class

linux下的shell和脚本

1.各种Unix shell linux下的shell基本是从unix环境中的shell发展而来,贴一下wiki:其中我们常用的,可归类为Bourne Shell(/usr/bin/sh或/bin/sh).Bourne Again Shell(/bin/bash).C Shell(/usr/bin/csh).K Shell(/usr/bin/ksh).Shell for Root(/sbin/sh),等等 第一个Unix shell是由肯·汤普逊,仿效Multic上的shell所实现出来,称为s

编程实现Linux下的ls -l

头文件 #ifndef __FUNC_H__ #define __FUNC_H__ #include<stdio.h> #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <dirent.h> #include <sys/stat.h> #inc

编程实现LINUX下目录的层层遍历

/************************************************************************* > File Name: treedir.c > Author: KrisChou > Mail:[email protected] > Created Time: Tue 19 Aug 2014 05:04:50 PM CST *****************************************************

Linux下添加shell脚本使得nginx日志每天定时切割压缩

Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常时查日志,还是使用"GoAccess"等工具对日志进行分析都将会变得非常麻烦.因此,每天定时对nginx日志进行切割压缩就非常有必要了 二 实现 我的实现思路是每天晚上接近12点时定时执行脚本.其脚本内容就是将当前的nginx日志先按照当天日期进行重命名接着进行压缩,最后是新建空白的ngi

[转] 关于linux下通过shell命令(自动)修改用户密码

关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自动修改本地用户密码及远程机器的用户密码.对做自动化测试提供了自动修改用户密码的原理及方法. 修改本地用户密码:1.交互配置本地用户:以root用户: passwd <username>Changing password for user dewang.New UNIX password: BAD

2019.11.13课堂实验之用Linux下的shell脚本完成两文本交替输出

有两个文本如下,实际中并不知道两文本各有多少行: 文本1.txt aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ccccccccccccccccccccccccccccccccccccccc eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee ggggggggggggggggggggggggggggggggggggggg wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww zzzzzzzzzzzzzzzzz