概述
走近 shell
- 简介
- shell能干什么?
a. 解决重复性工作的利器,可以批量处理相同类型的工作
b. 可以将命令集合,从而一键完成一项工作- shell和shell脚本的区别:
a. shell,是用户和kernel之间的代理,解释命令并负责将命令传递给kernel。我们在终端上输入ls、rm等命令,这个命令行程序就是shell。
b. shell脚本,使用shell编写的小工具。shell也是一种编程语言,具备编程语言的基本要素。shell区别于编译型语言,是解释型语言(或叫脚本语言)。
命令行程序是怎么工作的,我们无需关注,与我们紧密相关的是shell脚本,所以下面对shell脚本做下简单介绍:
- 以#开头的单行文是注释
- shell脚本文件
a. 可以有后缀.sh,也可以没有后缀
b. 第一行#!(Shebang符号)后指定了用哪种shell解释器执行脚本。#!符号读作 Shebang或者Sha-bang,中文名称是“释伴”,同时也是Shebang的音译。Unix术语中,#通常称为sharp、hash或mesh,而!常常称为bang。
c. #!/bin/bash和#!/bin/sh编程是有差异的,在实际编程时注意体会- 变量
a. 变量赋值时,=左右不能有空格,否则会把变量名字识别为命令
b. 环境变量:由export关键字处理过的变量叫做环境变量- 参考文件
shell脚本中#!符号
shell中的#!符号
shell和shell脚本的区别
shell简介
- 主流shell有3种,如下:
名字 | 作者 | 简介 | 优点 | 缺点 |
---|---|---|---|---|
Bourne shell (sh) | Steven Bourne | UNIX 最初使用的 shell 并且在每种 UNIX 上都可以使用 | 在 shell 编程方面相当优秀 | 但在处理与用户的交互方面做得不如其他几种 shell |
C shell (csh) | Bill Joy | 1. 更多的考虑了用户界面的友好性 2. 支持像命令补齐(command-line completion)等一些 Bourne shell 所不支持的特性 | C shell的语法和 C 语言很相似,对于C程序员更容易上手 | 普遍认为C shell 的编程接口做的不如 Bourne shell |
Korn shell (ksh) | Dave Korn | 集合了 C shell 和 Bourne shell 的优点并且和 Bourne shell 完全兼容,收费 |
- Linux上常见的shell,是基于上面3种主流shell做的扩展,如下:
名字 | 简介 |
---|---|
bash | Bourne Again shell,sh的扩展,大多数Linux 系统的缺省 shell,遵循GPL协定 |
tcsh | csh 的扩展 |
pdksh | Public Domain Korn shell, ksh 的扩展 |
linux bash
bash用的比较多,下面着重看看其特点
序号 | 特性 | 描述 | 例子 |
---|---|---|---|
1 | command line completion | 使用Tab可尝试进行命令对齐 | |
2 | 通配符 | 模糊匹配上目标文件、某一类型文件(比如所有的*.doc文件、所有的*.c文件) | |
3 | 命令历史记录 | 用上方向键和下方向键可以查找执行过的命令 history n显示最后的n条历史命令 | |
4 | 命令别名 | 让长命令变成短命令,可以少输入一些字符但可以实现目的 | i. 为经常使用的长命令添加一个别名 1. ~$ alias open_read='cd ~/svn/testcode/open_read’ 2. ~$ open_read 3. ~/svn/testcode/open_read$ ii. 取消别名的方法:unalias opne_read iii. 查看别名是否添加成功:命令行中输入alias,将显示当前已定义的所有别名 iv. 我们经常使用的ll也是alias的一个实例:alias ll=‘ls -alF’ |
5 | 管道 | 多命令输入输出间的纽带 | |
6 | 作业控制 | 可以让进程在后台或者前台重新执行。这个特性极大地方便了这样的场景,比方我要查找某个文件,2s时间内都没有出来,那我可以让该进程在后台进行,这样就可以继续与shell交互干其他事情了 | 10:47:35/ find ./ -name “test” > find.out ^Z [1]+ 已停止 find ./ -name “test” > find.out10:47:43/ bg [1]+ find ./ -name “test” > find.out & 10:47:46/ [1]+ 完成 find ./ -name “test” > find.out |
7 | 命令提示符 | 可以根据需要改变shell命令提示符 | 例如,当我比较关注时间的时候,可以将提示符修改为时间<不关注时间的时候,没有必要做修改,个人感觉不好定位到执行上一条命令的位置> |
8 | 个性化配置bash | 可以修改命令提示符等 |
参考:shell语言介绍