1)什么是shell?
shell的本意是“壳”的意思,其实已经很形象地说明了shell在Linux系统中的作用。shell就是围绕在Linux内核之外的一个“壳”程序,用户在操作系统上完成的所有任务都是通过shell与Linux系 统内核的交互来实现的。
shell本身是一个C语言编写的程序,是用户和操作系统内核之间通信的桥梁。
现在的Linux系统发行版一般都以bash作为默认的shell。
shell既是一种命令解释程序,又是一种功能强大的解释型程序设计语言。
2)用了做什么?
作为命令解释程序,shell解释用户输入的命令,然后提交到内核处理,最后把结果返回给用户。
shell还是强大的解释型程序设计语言,它定义了各种选项和变量,几乎支持高级程序语言的所有程序结构,例如变量、函数、表达式和循环等。利用shell可以编写shell脚本程序,类似于 Windows/DOS下的批处理文件,但是shell功能更加完善,更加强大。
3)如何工作?
shell中定义了一些内置的命令,一般我们把shell自身解释执行的命令称为内置命令,例如下面我们将要讲到的cd、pwd、exit,read和echo等命令,都是属于bash的内置命令。当用户登录 系统后,shell以及内置命令就被系统载入到内存,并且一直运行,直到用户退出系统为止。除了内置命令,Linux系统上还有很多可执行文件。可执行文件类似于Windows下的.exe文件, 这些可执行文件也可以作为shell命令来执行。其实Linux上很多命令都不是shell的内置命令,例如ls就是一个可执行文件,存放在/bin/ls中。这些命令与shell内置命令不同,只有当它们被调 用时,才由系统装入内存执行。
a read变量名表 功能:从标准输入设备读入一行,分解成若干字,赋值给shell程序内部定义的变量。
4)shell的命令格式
command [options] [arguments]
— command:表示命令的名称。
— options:表示命令的选项。选项是包含一个或多个字母的代码,主要用于改变命令的执行方式。一般在选项前面有一个“-”符号,用于区别参数。例如:[root@WEBServer ~]#ls -a
一般命令都有很多选项,可以单独列出它们,也可以在“-”后面把需要的选项都列出来,例如,ls –a –l 或ls –al
— arguments:表示命令的参数。参数就是在选项后面紧跟的一个或多个字符串,这些字符串指定了命令的操作对象,如文件或者目录。
在shell的一个命令行中,还可以输入多个命令,用分号将各个命令分开。相反也可以在多行中输入一个命令,用“/”将一个命令持续到下一行:
5)shell的通配符
“*”——匹配任意一个或多个字符
“?”——匹配任意单一字符
“[]”——匹配任何包含在方括号内的单字符
6)shell的重定向
Linux下系统打开3个文件,即标准输入、标准输出和标准错误输出。用户的shell将键盘设为默认的标准输入,默认的标准输出和标准错误输出为屏幕。也就是用户从键盘输入命令,然后将 结果和错误信息输出到屏幕。
所谓的重定向,就是不使用系统默认的标准输入输出,而是重新指定,因此重定向分为输入重定向、输出重定向和错误输出重定向。要实现重定向就需 要了解重定向操作符, shell 就是根据重定向操作符来决定重定向操作的。
a 输入重定向:用于输入重定向的操作符有“<”和“<<”,重定向“<<”,这种重定向告诉shell,当前命令的标准输入为来自命令行中一对分隔号之间的内容(少用)
b 输出重定向:用于输出重定向的操作符有“>”和“>>”,如果在“>”后面指定的文件不存在的话,shell就会自动重建一个;如果文件存在的话,那么这个文件原有的内容将被覆盖;如果不 想覆盖存在的文件,可以使用“>>”操作符
7)shell的管道
管道可以把很多命令连接起来,可以把第1个命令的输入当作第2个命令的输出,第2个命令的输出当作第3个命令的输入,依此类推。因此,管道的作用就是把一个命令的输出当作下一 个命令的输入,而不经过任何中间文件。通过管道符“|”可以建立一个管道连接
8)shell中的引用
在bash中有很多特殊字符,这些字符本身就具有特殊含义。如果在shell的参数中使用它们,就会出现问题。Linux中使用了“引用”技术来忽略这些字符的特殊含义,引用技术就是通知shell 将这些特殊字符当作普通字符处理。shell中用于引用的字符有转义字符“/”、单引号“'”、双引号“" "”。
a 转义字符“/” 如果将“/”放到特殊字符前面,shell就忽略这些特殊字符的原有含义,当作普通字符对待,
b 单引号“'” 将字符串放到一对单引号之间,那么字符串中所有字符的特殊含义将被忽略
c 双引号“" "” 双引号的引用与单引号基本相同,包含在双引号内的大部分特殊字符可以当作普通字符处理,但是仍有一些特殊字符即使用双引号括起来,也仍然保留自己的特殊含义,比 如“$”、“/”和“`”。单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。
9)shell有两类变量:
1) 局部 用set查看
2) 环境 用env查看