7、防写一个shell 命令解释器

发布时间:2024年01月12日

1、代码部分

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_INPUT_LENGTH 100

void parse_command(char *command) {
    // 用于存储解析后的命令和参数
    char cmd[MAX_INPUT_LENGTH];
    char args[MAX_INPUT_LENGTH];

    // 将输入的命令拷贝到新的字符串中,以便使用strtok
    strcpy(args, command);

    // 解析命令
    char *token = strtok(args, " ");
    if (!token) {
        printf("无效的命令\n");
        return;
    }
    strcpy(cmd, token);

    // 解析参数
    token = strtok(NULL, "");
    if (token) {
        printf("命令: %s, 参数: %s\n", cmd, token);
    } else {
        printf("命令: %s, 无参数\n", cmd);
    }

    // 根据解析后的命令执行相应的操作
    if (strcmp(cmd, "echo") == 0) {
        printf("%s\n", token);
    } else if (strcmp(cmd, "quit") == 0) {
        exit(0);
    } else {
        printf("未知命令: %s\n", cmd);
    }
}

int main() {
    char input[MAX_INPUT_LENGTH];

    printf("简单命令解释器 - 输入 'quit' 退出\n");

    while (1) {
        // 获取用户输入
        printf("> ");
        fgets(input, sizeof(input), stdin);

        // 移除换行符
        size_t len = strlen(input);
        if (len > 0 && input[len - 1] == '\n') {
            input[len - 1] = '\0';
        }

        // 解析并执行命令
        parse_command(input);
    }

    return 0;
}

2、实验结果在这里插入图片描述
3、把可执行文件放到 /bin/test1 就可以像ls 命令使用了,在终端里面,感觉实现原理都是通过系统调用实现的

文章来源:https://blog.csdn.net/lhh_qrsly/article/details/135559778
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。