shell
- Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。
- Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲 命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,包括循环和分支。但Shell脚本是解释执行的,不需 要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一 行敲到Shell提示符下执行。作为程序设计语言,它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。
Unix系统中常见的shell有:sh、csh、ksh、tcsh、bash 使用命令:
vim /etc/shells 可以查看当前系统支持的bash
shell执行脚本
shell执行脚本是一门解释性语言、批量化处理语言,大大的节省了工作成本shell脚本第一行必须以
#!开头,它表示该脚本使用后面的解释器解释执行。举个栗子://script.sh 注:这是一个文本文件
| 12345 | #!/bin/bashecho "this is a test"lsls -lecho "there are all files" |
执行方式:
| 123456 | [admin@localhost Shell]$ chmod +x script.sh[admin@localhost Shell]$ ./script.sh [admin@localhost Shell]$ /bin/bash script.sh |
执行过程:Shell会fork一个子进程并调用exec执行./script.sh这个程序,exec系统调用应该把子进程的代码段替换成./script.sh程序的代码段,并从它的_start开始执行。然而script.sh是个文本文件,根 本没有代码段和_start函数,怎么办呢?其实exec还有另外一种机制,如果要执行的是一个文本文件,并且第一行 指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器 的_start开始执行,而这个文本文件被当作命令行参数传给解释器。因此,执行上述脚本相当于执行程序!
输入命令执行shell脚本后:- 交互式进程(父进程)创建一个子进程用于执行脚本,父进程等待子进程终止
- 子进程程序替换bash解释器
- 读取shell脚本的命令,将其以参数传递的方式传递给bash解释器
- 子bash对shell脚本传入的参数进行读取,读一行识别到它是一个命令,则再创建一个子进程,子bash等待该新进程终止
- 新进程执行该命令,执行完后将结果交给子进程
- 子进程继续读取命令,创建新进程,新进程执行该命令,将结果返回给子进程,直到执行完最后一条命令
- 子进程终止,将结果返回给交互式父进程
注意:像export、cd、env、set 这些内置命令,在键入命令行后,交互式进程不会创建子进程,而是调用bash内部的函数执行这些命令,改变的是交互式进程。如果在命令行下,将多个命令用括号括起来,并用分号隔开来执行,交互式进程依然会创建一个子shell执行括号中的命令:如果不加括号则是另一种情况,
cd .. 命令会直接在交互式shell下执行:. 或者 source这两个命令是Shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行 执行脚本中的命令。例证:script.sh
| 12345 | #!/bin/bashlsecho "#################"cd ..ls |
更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-08/134306p2.htm
shell 中的 eval 及 crontab 命令Unix下 五种 I/O模型相关资讯 Shell脚本 Shell脚本入门
- 在shell脚本中使用函数 (今 11:53)
- shell脚本中报错dirname:无效选项 (12/21/2015 19:12:37)
- shell脚本:MySQL启动简易脚本 (11/19/2015 19:59:52)
| - 使用shell批量生成数据整合式迁移 (03月29日)
- shell脚本:监控MySQL服务是否正常 (11/19/2015 20:05:43)
- shell脚本:打印文本中字符数不大 (11/19/2015 19:57:46)
|
本文评论 查看全部评论 (0)