Shell脚本编程——1. Shell简介

1. Shell简介
shell是提供交互式计算机编程环境的UNIX程序,在终端窗口中使用 shell 与 UNIX 风格的操作系统(例如 Linux 或 MacOS)进行交互。
shell 位于用户和操作系统之间,提供一些有用的命令和功能。简单来看,shell是一个程序,用于为用户运行指定命令并向用户显示运行结果。
1.1 特性
1.1.1 命令嵌套
把已有命令进行适当组合构成新的命令。
1.1.2 文件名扩展
提供了文件名扩展字符(通配符,如* 、 ?、 [ ]),使得用单一的字符串可以匹配多个文件名,省去键入一长串文件名的麻烦。
1.1.3 直接使用Shell内置命令
可以直接使用Shell的内置命令,而不需创建新的进程,如Shell中提供的cd、echo、exit、pwd、kill等命令。为防止因某些Shell不支持这类命令而出现麻烦,许多命令都提供了对应的二进制代码,从而也可以在新进程中运行。
通常来说,内建命令会比外部命令执行得更快,执行外部命令时不但会触发磁盘 I/O,还需要 fork 出一个单独的进程来执行,执行完成后再退出。而执行内建命令相当于调用当前 Shell 进程的一个函数。
1.1.4 灵活地使用数据流
Shell允许灵活地使用数据流,提供通配符、输入/输出重定向、管道线等机制,方便了模式匹配、I/O处理和数据传输。
1.1.5 结构化
结构化的程序模块,提供了顺序流程控制、条件控制、循环控制等。
1.1.6 可后台执行
Shell提供了在后台执行命令的能力。
1.1.7 环境可配置
Shell提供了可配置的环境,允许创建和修改命令、命令提示符和其它的系统行为。
1.1.8 可创建复杂程序(Shell脚本)
Shell提供了一个高级的命令语言,能够创建从简单到复杂的程序。这些Shell程序称为Shell脚本,利用Shell脚本,可把用户编写的可执行程序与Unix命令结合在一起,当作新的命令使用,从而便于用户开发新的命令。
1.2 Shell种类
sh:Bourne Shell,UNIX 上的标准shell,很多UNIX版本都配有sh
bash:Bourne Again Shell,Linux的默认shell,bash兼容sh,但并不完全一致
csh:C Shell,语法与C语言相似
ksh:Korn Shell,基于Bourne shell的源代码发展而来
...
查看当前系统所有可用的Shell
查看当前正在使用的Shell
查看系统默认的Shell
sh 一般被 bash 代替,/bin/sh
往往是指向/bin/bash
的符号链接
1.3 命令执行方式
交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条
批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
1.4 使用场景
1.4.1 建议使用的场景
使用只基于 UNIX 风格的操作系统(如Linux)开发的程序(如bwa、gatk),或需要在服务器上运行软件
文件操作可以使用简单的命令完成
批量操作文件/文件夹
主要调用其他应用程序并且数据操作较少
多条命令需要被重复执行时(Shell脚本)
1.4.2 不建议使用的场景
资源密集型的任务,尤其在需要考虑效率时(如排序,hash等)
需要处理大量数学操作,尤其是浮点运算,精确运算,或者复杂的算术运算(C/C++)
有跨平台(操作系统)移植需求(一般使用C或Java)
复杂的应用,在必须使用结构化编程的时候(需要变量的类型检查,函数原型等)
需要复杂数据结构的支持,比如类、链表或多维数组等数据结构(R、Python)。
需要产生或操作图形化界面 GUI。
私人的、闭源的程序