如果用户输入一条命令,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 :
- #!/bin/bash
- #test command
- if test 10 -gt 2
- then
- echo " 10>2 成立 "
- else
- echo "10>2 不成立"
- fi
不要以为[ 表达式 ] 中的 [ ] 是中括号,其实" [ " 是一个命令。“]” 是它的一个必须参数。
test 和 [ 这2个命令具有相同的功能,但是" [ " 必须带上参数 “]” ,而test则不需要。