shell编程:定义简单标准命令集
shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程,如Linux中的脚本编程。
shenll运行原理:由消息接收、解析、执行构成的死循环。
命令行shell:该死循环包含3个模块(命令接收、命令解析、命令执行),命令行有一个标准命令集,用户输入的命令若不是标准命令,则提示用户这不是一个合法命令行,然后重新回到命令行让用户输入下一个命令。
常见的shell:uboot、Linux终端、Windows图形界面等
shell实例1:使用printf和scanf做输入回显
#include <stdio.h> #include <string.h>#define MAX_LINE_LENGTH 256 // 定义命令行长度,命令不能超过这个长度int main(void) {char str[MAX_LINE_LENGTH]; // 用来存放用户输入的命令内容while (1){// 打印命令行提示符,注意不能加换行printf("Please input your command:#");// 清除str数组以存放新的字符串memset(str, 0, sizeof(str));// shell第一步:获取用户输入的命令scanf("%s", str);// shell第二步:解析用户输入命令// shell第三步:处理用户输入命令printf("%s\n", str);}return 0; }
memset(str,0,sizeof(str))
1 //清除数组 2 void memset(char *p, int val, int length) 3 { 4 int i; 5 6 for (i=0; i<length; i++) 7 { 8 p[i] = val; 9 } 10 }
shell实例2:解析用户输入命令并回显
1 #include <stdio.h> 2 #include <string.h> 3 #define MAX_LINE_LENGTH 256 // 命令行长度,命令不能超过这个长度 4 5 // 宏定义一些标准命令 6 #define led "led" 7 #define lcd "lcd" 8 #define pwm "pwm" 9 #define CMD_NUM 3 // 当前系统定义的命令数 10 11 char g_cmdset[CMD_NUM][MAX_LINE_LENGTH]; 12 13 // 初始化命令列表 14 static void init_cmd_set(void) 15 { 16 memset(g_cmdset, 0, sizeof(g_cmdset)); // 先全部清零 17 strcpy(g_cmdset[0], led); 18 strcpy(g_cmdset[1], lcd); 19 strcpy(g_cmdset[2], pwm); 20 } 21 22 int main(void) 23 { 24 int i = 0; 25 char str[MAX_LINE_LENGTH]; // 用来存放用户输入的命令内容 26 27 init_cmd_set(); 28 29 while (1) 30 { 31 // 打印命令行提示符,注意不能加换行 32 printf("Please input your command:#"); 33 // 清除str数组以存放新的字符串 34 memset(str, 0, sizeof(str)); 35 // shell第一步:获取用户输入的命令 36 scanf("%s", str); 37 // shell第二步、第三步:解析用户输入命令、处理用户输入命令 39 for (i=0; i<CMD_NUM; i++) 40 { 41 if (!strcmp(str, g_cmdset[i])) 42 { 43 // 相等,找到了这个命令,执行这个命令所对应的动作。 44 printf("您输入的命令是:%s,是合法的\n", str); 45 break; 46 } 47 } 48 if (i >= CMD_NUM) 49 { 50 // 找遍了输入命令都没找到这个符合要求的,则输出相应指示 51 printf("%s不是一个内部合法命令,请重新输入\n", str); 52 } 53 } 54 55 return 0; 56 }
void strcpy(char *dst, const char *src)
1 //复制字符串常量到数组中 2 void strcpy(char *dst, const char *src) 3 { 4 while (*src != '\0') 5 { 6 *dst++ = *src++; 7 } 8 }
int strcmp(const char *cs, const char *ct)
1 //比较两字符串是否相同 2 int strcmp(const char *cs, const char *ct) 3 { 4 unsigned char c1, c2; 5 6 while (1) { 7 c1 = *cs++; 8 c2 = *ct++; 9 if (c1 != c2) 10 return c1 < c2 ? -1 : 1; 11 if (!c1) 12 break; 13 } 14 return 0; 15 }
shell实例3:shell编程将用户输入的字符串命令按照空格分隔成多个字符串,依次放入cmd二维数组中并解析执行命令
1 void cmdsplit(char cmd[][MAX_LEN_PART], const char *str) 2 { 3 int m = 0, n = 0; 4 while (*str != '\0') 5 { 6 if (*str != ' ') 7 { 8 cmd[m][n] = *str; 9 n++; 10 } 11 else 12 { 13 cmd[m][n] = '\0'; 14 n = 0; 15 m++; 16 } 17 str++; 18 } 19 cmd[m][n] = '\0'; 20 }
解析命令:
1 void cmd_parser(char *str) 2 { 3 int i; 4 5 // 第一步,先将用户输入的次命令字符串分割放入cmd中 6 cmdsplit(cmd, str); 7 8 // 第二步,将cmd中的次命令第一个字符串和cmdset对比 9 cmd_index = -1; 10 for (i=0; i<CMD_NUM; i++) 11 { 12 // cmd[0]就是次命令中的第一个字符串,也就是主命令 13 if (!strcmp(cmd[0], g_cmdset[i])) 14 { 15 // 相等,找到了这个命令,就去执行这个命令所对应的动作。 17 cmd_index = i; 18 19 break; 20 } 21 }
执行命令
1 void cmd_exec(void) 2 { 3 switch (cmd_index) 4 { 5 case 0: 6 do_cmd_led(); break; 7 case 1: 8 case 2: 9 default: 10 do_cmd_notfound(); break; 11 } 12 }
转载于:https://www.cnblogs.com/CYP01/p/5928211.html
shell编程:定义简单标准命令集相关推荐
- linux shell编程 ppt,Linux常用命令与Shell基本编程.ppt
Linux常用命令与Shell基本编程.ppt Shell 脚本基本编程,无线产品部 katanazhang 2009-11-09,课程目标,linux 常用命令 shell 脚本编程 awk 的用法 ...
- linux shell编程多线程和wait命令学习
http://blog.csdn.net/shuanghujushi/article/details/38186303 最近在使用shell做一些部署工作,在使用过程中,效率一直不高.想提高效率,经过 ...
- shell编程之简单四则运算及数组定义
shell简单四则运算及数组定义 文章目录 shell简单四则运算及数组定义 一.简单四则运算 1. 四则运算符号 2.了解i++和++i 二.数组定义 1. 数组定义 2. 其他变量定义 一.简单四 ...
- 从简入难makefile文件编写,Linux C++编程,简单vi命令
1.一个最基本的C++程序 2.第二个c++程序 3.第一个入门级别的简单的makefile 4.在makefile中定义变量. 5.编写makefile的依赖 如果start:标识后面的某个. ...
- linux sh 定义变量,Shell编程定义变量的方式有哪些?
1. 三种定义变量的方式 (1) 直接赋值 (2) 传参 (传递参数) (3) 交互式设置变量,使用read命令 2. read命令说明 在命令行中使用[root@oldboy scripts]# r ...
- Shell编程进阶 1.3data命令
date命令是显示日期时间的命令 date 2016年 01月 01日 星期五 15:05:01 CST 修改时间的选项是 -s date -s "2016-01-01 12:56:10&q ...
- python网络编程实现简单远程命令执行
前言 套接字(Sockets)是双向通信信道的端点. 套接字可以在一个进程内,在同一机器上的进程之间,或者在不同主机的进程之间进行通信,主机可以是任何一台有连接互联网的机器. 一.基本语法 创建套接字 ...
- Shell编程(脚本)的常用命令和语句
一些常用的Shell编程(脚本)命令和语句,可以满足一般需求. 接收到的命令参数: 参数个数: $# 参数值: 命令本身:$0 第一个参数:$1 第二个参数:$2 -- 退出命令: exit echo ...
- Shell编程(week4_day1)--技术流ken
本节内容 1.shell简介 2. shell分类 3. 查看shell 4. 第一个shell脚本 5. shell编程常用命令 5.1 grep 5.2 cut 5.3 sort ...
最新文章
- 纯CSS3进行hover时显示带箭头和动画的tips效果
- linux mysql 1030,MySQL报错ERROR 1030 (HY000): 解决过程
- 恭喜《软件随想录》得到了大家的一致认可!
- 灰度重心法原理与实现
- 基于Android的ELF PLT/GOT符号重定向过程及ELF Hook实现(by 低端码农 2014.10.27)
- python的匿名函数返回值_Python匿名函数返回值输出问题望指点
- 深圳出差 第一天【原创】
- mybatis-plus乐观锁
- GDAL对于raw数据支持的一个bug
- web之Attribute
- 服务器2012导出日志文件,MDT2012,client部署日志存放在服务器上
- 这些高逼格的网站设计,能看到无数美的东西~
- [网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗
- 广州小程序开发公司哪家好?广州小程序开发公司排行前十?
- mysql 1032_[MySQL] SQL_ERROR 1032解决办法
- WSTMart 1.4.2 发布,让 bug 不再飞
- [NOIP2010 普及组] 三国游戏 题解
- BurpSuite-Proxy使用
- STM32CubeMX+SPI+FATFS读写SD卡
- 扫地机器人哪个牌子好用?高性价比扫地机器人推荐