在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
交互式shell和非交互式shell
交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。
Linux常见shell
bash:是Linux标准默认的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。
bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat,Slackware,Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。
sh: 由Steve Bourne开发,是Bourne Shell的缩写,sh 是Unix 标准默认的shell。
首个重要的标准Unix Shell是1970年底在V7 Unix(AT&T第7版)中引入的,并且以它的创始科技部基础条件平台“国家气象网络计算应用节点建设”(2004DKA50730)资助者Stephen Bourne的名字命名。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。
csh:C shell。Bill Joy于20世纪80年代早期,在伯克利的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。
ksh:Korn shell。有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。
ash:????
——BASH命令:
—echo命令(系统变量默认大写:HOSTNAME、LANG等,变量名称区分大小写 )
1.显示普通字符串:echo "It is a test"
2.显示转义字符:echo "\"It is a test\""
3.显示变量:配合read命令,read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
read name
输入:It is a test
echo $name
显示:It is a test"
4.显示格式:echo-e"OK! \n"(-e开启转义),echo -e "OK! \c"(不换行)
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;\v 与\f相同;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
5.显示结果定向至文件:echo "It is a test" > myfile。
6.原样输出字符串,不进行转义或取变量(用斜点,TAB上面那个):echo '$name\"'。
7.显示命令执行结果:echo `date`。
—shell输入输出——标准输入0、输出1、错误2
>,输出;>>,追加输出;<,输入;
--wc命令,统计。-l,统计行。
—SHELL后台执行命令
at服务,在特定时间运行一些特定作业。yum –y install at,安装at服务。
cron命令,在无人干预情况下运行作业。
—变量之系统变量
—变量之用户变量
set定义的用户变量,重启后失效;
.bash_profile文件中定义的用户变量,重启后还在,为永久的变量;
—变量之位置变量
属于只读变量,0-9位置被访问到,0为脚本名称。
执行脚本文件SH XXX.sh。
—变量之特定变量
—SHELL程序设计流程控制
——test测试命令(使用[],括号内有空格,关键字之间有空格,如[ A ?? B ])
数值测试:
echo $?
-eq:equal
-ne:not equal
-le:less equal
-ge:great equal
-gt:great than
-lt:less than
字符串测试:
文件测试:
——expr测试语句
``,代表执行运算结果;
expr运算适用整数,结果非整数时,向下取整;
——IF条件判断
if,elif,else,fi,四段;
——for循环
——while和until循环
while,达到条件时开始执行;
until,达到条件时最后一次执行;
——case条件选择
????