运维第一工具-shell编程

shell历史

Shell的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,但Shell脚本是解释执行的,不需要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一行敲到Shell提示符下执行。

由于历史原因,UNIX系统上有很多种Shell

1.sh(Bourne Shell):由Steve Bourne开发,各种UNIX系统都配有sh。

2.csh(C Shell):由Bill Joy开发,随BSD UNIX发布,它的流程控制语句很像C语言,支持很多Bourne Shell所不支持的功能:作业控制,命令历史,命令行编辑。

3.ksh(Korn Shell):由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能,是目前很多UNIX系统标准配置的Shell,在这些系统上/bin/sh往往是指向/bin/ksh的符号链接。

4.tcsh(TENEX C Shell):是csh的增强版本,引入了命令补全等功能,在FreeBSD、Mac OS X等系统上替代了csh。

5.bash(Bourne Again Shell):由GNU开发的Shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容,bash从csh和ksh借鉴了很多功能,是各种Linux发行版标准配置的Shell,在Linux系统上/bin/sh往往是指向/bin/bash的符号链接。虽然如此,bash和sh还是有很多不同的,一方面,bash扩展了一些命令和参数,另一方面,bash并不完全和sh兼容,有些行为并不一致,所以bash需要模拟sh的行为:当我们通过sh这个程序名启动bash时,bash可以假装自己是sh,不认扩展的命令,并且行为与sh保持一致。

6.zsh 的命令补全功能非常强大,可以补齐路径,补齐命令,补齐参数等。

vim /etc/passwd
其中最后一列显示了用户对应的shell类型
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
syslog:x:101:103::/home/syslog:/bin/false
itcast:x:1000:1000:itcast,,,:/home/itcast:/bin/bash
ftp:x:115:125:ftp daemon,,,:/srv/ftp:/bin/false

用户在命令行输入命令后,一般情况下Shell会fork并exec该命令,但是Shell的内建命令例外,执行内建命令相当于调用Shell进程中的一个函数,并不创建新的进程。以前学过的cd、alias、umask、exit等命令即是内建命令,凡是用which命令查不到程序文件所在位置的命令都是内建命令,内建命令没有单独的man手册,要在man手册中查看内建命令,应该

$ man bash-builtins

如export、shift、if、eval、[、for、while等等。内建命令虽然不创建新的进程,但也会有Exit Status,通常也用0表示成功非零表示失败,虽然内建命令不创建新的进程,但执行结束后也会有一个状态码,也可以用特殊变量$?读出。

最新文章

  1. 使用keytool 生成证书
  2. Collider Collision 区别
  3. Android Toast效果设置
  4. [asp.net core]project.json(1)
  5. ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法
  6. nodejs 核心模块crypto
  7. Java GC 面试问题
  8. call函数心得
  9. 基本java类-In.java
  10. DTCMS展示一级栏目并展示各自栏目下的二级栏目
  11. Asp.net Mvc4 基于Authorize实现的模块访问权限
  12. cf Sereja and Array
  13. 检查DISPLAY设置时Xlib出现No protocol specified错误
  14. HDU 5543 Pick The Sticks:01背包变种
  15. Android项目刮刮奖详解(二)
  16. jvm到底是什么?有什么作用?工作机制如何?
  17. 《GPU高性能编程CUDA实战》第四章 简单的线程块并行
  18. python 井字棋(Tic Tac Toe)
  19. Struts2_day04讲义_使用Struts2完成用户登录的权限拦截器的代码编写
  20. 如何生成.mobileprovision文件

热门文章

  1. H5 canvas建造敌人坦克
  2. Java实现GUI计算器【代码】
  3. LINUX 操作记录到syslog,并发送到syslog服务器上
  4. New Concept English Two 22 58
  5. avalon 搭配 百度的UI移动框架 gmu 可以很好干活
  6. 0基础小白怎么学好Java?
  7. c++ int 转 string 实现前缀补0
  8. SqlServer高级特性--游标
  9. 发发牢骚,觉得走c#这条路,不该太浮躁。
  10. C语言使用pthread多线程编程(windows系统)一