免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7943 | 回复: 9
打印 上一主题 下一主题

LINUX是如何实现命令行解析的呢? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-12 15:37 |只看该作者 |倒序浏览
大家都知道,在LINUX命令行,可输入ifconfig命令来配置一个接口的命令行,是因为前期操作系统已经把ifconfig.c编译好了,有了这个命令了,
但是,从SHELL界面上输入的字符串是谁为我们解析的,又是如何找到了ifconfig模块中的main函数来执行的呢?
盼高手来解答。

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2011-10-12 15:39 |只看该作者
SHELL界面上输入的字符串当然是shell解析的,然后调用命令

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2014-03-27 15:44:382015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2011-10-12 15:41 |只看该作者
shell是核武器,什么都能做

论坛徽章:
0
4 [报告]
发表于 2011-10-12 15:49 |只看该作者
你所说的命令是在bin 或者 sbin中的命令

论坛徽章:
0
5 [报告]
发表于 2011-10-12 16:35 |只看该作者
Shell是Linux 系统中一个非常重要的组成部分,是命令行解释程序的简称。Shell提供的许多特性使Linux 系统成为最有效、最灵活的操作系统之一,Shell除了作为命令解释程序之外,还是一种高级程序设计语言,并且有独立的语法结构,用户可以方便地使用Shell 编程语言作为高级编程语言来编写Shell 脚本,使用这种脚本可以极大地提高编程的效率。

Shell通常有众多的版本,但是,Linux 只使用Bash作为默认的命令解析器,Bash是自由软件基金会GNU开发的一个Shell,它不仅符合用户的操作习惯,而且继承了许多其他Shell 版本的优点慢慢发展壮大。在操作过程中Bash具有以下优点:

历史行记忆功能。Bash可以恢复以前输入的命令,例如,用户在几小时前或者几天前在命令行中输入过“chmod +xhello”,当前通过多次按向上箭头键可回显这条命令。

命令补全功能。在输入文件名一部分后,由系统自动填入剩余的部分。例如,通过vi 程序打开在root 目录下的hello.c文件,在命令行中输入“vi he”之后,按【Tab】键,hello.c文件名将自动填充。

支持通配符功能。在命令行中可以使用“*”“?”“. ”等通配符作为一个匹配工具,省去了输入一长串文件名的麻烦。

Shell 内置命令。在命令行下,可直接使用Shell 内置命令,如cd、ps、chmod、ls等。

用户自己编写Shell 脚本。Shell 提供一种高级的编程语言,它有变量、关键字及控制语句,并且有自己的语法结构。用户可以方便地使用Shell编程语言自己编写Shell脚本,通过它既可以编写简单的代码也可以编写复杂的、功能完善的程序。使用Shell脚本能极大地提高编程效率。

论坛徽章:
0
6 [报告]
发表于 2011-10-12 16:39 |只看该作者
getopt例程:

程序描述:
程序名:opt_parse_demo
选项:

-n —— 显示我的名字。
-g —— 显示我女朋友的名字。
-l —— 带参数的选项.
清单2:#include
#include
int main (int argc, char **argv)
{
    int oc;                     /*选项字符 */
    char *b_opt_arg;            /*选项参数字串 */
    while((oc = getopt(argc, argv, "ngl:")) != -1)
    {
        switch(oc)
        {
            case 'n':
                printf("My name is Lyong.\n");
                break;
            case 'g':
                printf("Her name is Xxiong.\n");
                break;
            case 'l':
                b_opt_arg = optarg;
                printf("Our love is %s\n", optarg);
                break;
        }
    }
   return 0;
}
运行结果:
$ ./opt_parse_demo -n
My name is Lyong.
$ ./opt_parse_demo -g
Her name is Xxiong.
$ ./opt_parse_demo -l forever
Our love is forever
$ ./opt_parse_demo -ngl forever
My name is Lyong.
Her name is Xxiong.
Our love is forever

论坛徽章:
0
7 [报告]
发表于 2011-10-12 16:48 |只看该作者

论坛徽章:
0
8 [报告]
发表于 2011-10-12 17:10 |只看该作者
nslookup这个就可以查得。

论坛徽章:
1
操作系统版块每日发帖之星
日期:2015-07-11 22:20:00
9 [报告]
发表于 2011-10-13 08:46 |只看该作者
shell解析,然后调用exec系列命令。

论坛徽章:
1
天秤座
日期:2013-10-23 13:20:42
10 [报告]
发表于 2011-10-13 09:37 |只看该作者
感觉lz也是想研究命令本身的实现,命令不是shell 脚本就是二进制可执行程序,这些都是需要通过分析源码去了解的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP