Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187576
  • 博文数量: 24
  • 博客积分: 418
  • 博客等级: 一等列兵
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-27 01:19
文章分类

全部博文(24)

文章存档

2013年(7)

2012年(17)

分类: Python/Ruby

2012-04-06 23:54:50

1. shell的是如何执行命令:
    如果用户输入一条命令,shell将解释执行一条,但是对于批处理的shell,可以将多条命令写在shell的一个脚本中,但是shell也是一条一条的执行。特别注意的是,shell是解释执行,并不进行编译。
     shell中分为内建命令,和外建命令。前面中提到过,也就是说,外建命令需要产生一个新的子进程。但是内建命令就不需要了。但是对于外建命令又是如何产生子进程的呢?
     对于外建命令:首先shell进程调用fork函数创建一个子进程,子进程和父进程具有相同PCB(进程控制块),程序段和数据段。fork(又称分叉,失败调用则返回-1)的作用就是复制和(大体这么理解)父进程一样的子进程。(图片来源全国嵌入式人才培训基地)

       fork函数的特点是:调用一次,返回2次,父进程中调用,在父进程和子进程中个返回一次。从上图看出,子进程中fork的返回值是0,而父进程中fork的返回值则是子进程的id

       子进程产生后,接下来在子进程中将会调用一个簇函数exec ,exec函数的作用是产生一个新的程序将替代子进程中的代码和数据,并且从这个新程序中开始执行。

          对于内建命令:执行内建命令相当于在shell中调用一个函数,并不产生子进程。
2. 用户默认的shell可以在/etc/passwd 中可以找到。
3. 测试命令:用来测试一个条件是否成立,如果为真,则该命令的Exit Status为0,反之则为1
     测试命令1:test  :

  1. #!/bin/bash
  2. #test command
  3. if test 10 -gt 2
  4. then
  5. echo " 10>2 成立 "
  6. else
  7. echo "10>2 不成立"
  8. fi
    测试命令2:[
    不要以为[  表达式  ]  中的 [  ] 是中括号,其实" [ " 是一个命令。“]” 是它的一个必须参数。
    test 和 [ 这2个命令具有相同的功能,但是" [ " 必须带上参数 “]” ,而test则不需要。

阅读(3250) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~