首页 > 代码库 > shell简介

shell简介

1、shell的工作原理

       其实当一个用户以命令行方式登录Linux系统之后,即就进入了shell应用程序。例如:以dog用户使用telnet登录Linux系统之后,就会进入shell的控制。从此时起shell就随时恭候,等待你的差遣(即等你输入命令)并为你保质保量的提供服务(执行输入的命令)。如果你是以图形界面登录,当开启一个终端窗口后也将进入shell应用程序的控制。跟开启的dos窗口有些类似。

       shell的功能是将用户输入的命令翻译成Linux内核能够理解的语言,这样Linux内核才能真正地操作计算机的硬件。简而言之,shell就是人与计算机沟通的桥梁。

可以将shell看成用户与Kernel之间的一个接口。shell主要是一个命令解释器,它接受并解释用户输入的命令,然后将它们传给Kernel。最后由Kernel来执行这些命令。

2、使用type识别bash的内置命令

Linux操作系统的命令分为两大类,一类是内部命令即内置在bash中的命令;另一类是外部命令(即该命令不是内置在bash中的)外部命令是以可执行文件的方式存储在Linux的文件系统中的。有时可能需要知道一个命令是内部还是外部命令,如所使用的Linux系统的PATH变量设置的问题,在执行外部命令时可能就需要给出完整的路径。

那么怎样区分哪些命令是外部命令,哪些命令是内部命令呢?即可以使用type命令。

[dog@dog ~]$ man type
使用以上语句命令可以可以查看命令的类型。

type命令的语法格式如下:

type [选项] 命令名

-t:显示文件的类型,其文件类型如下:

     file:为外部命令

     alias:为别名

     builtin:为bash的内置命令

-a:列出所有包含指定命令名的命令,也包括别名(alias)

-P:显示完整的文件名(外部命令),或者内部命令

以下是用type命令来显示pwd命令的类型。

[dog@dog ~]$ type pwd
pwd is a shell builtin
加上选项-a之后如:
[dog@dog ~]$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
加上选项-t之后如:

[dog@dog ~]$ type -t pwd
builtin
加上选项-P之后如:

[dog@dog ~]$ type -P pwd
/bin/pwd
3、使用通配符操作文件

Linux操作系统提供了如下的通配符:

*:将匹配0个(即空白)或多个字符

?:将匹配任何一个字符而且只能是一个字符

[a-z]:将匹配字符a~z范围内的所有字符

[^a-z]:将匹配所有字符但是a~z范围内的字符除外

[xyz]:将匹配方括号中的任意一个字符

[^xyz]:将匹配不包括方括号中的字符的所有字符

例如我们创建多个文件后,可以使用ls与以上的通配符结合进行查找文件。

4、利用Tab键补齐命令行

5、命令行中~符号的使用

(1)如果~符号后面没有用户名,则该符号代表当前用户的家目录;

(2)如果~符号后面跟一个用户名,则该符号代表这个用户的家目录。

6、history命令与操作曾经使用过的命令

输入history命令,可以显示之前使用过的命令,并且最左边显示命令编号,因而可以使用命令号重新执行所对应的命令。即输入“!“(惊叹号)符号,后面紧跟编号即可。

bash中提供的一些快捷键的使用如下:

(1)利用键盘的上、下箭头键可以在以前使用过的命令之间移动

(2)按Ctrl+R键在命令的历史记录中搜寻一个命令。当按Ctrl+R键之后,会出现如下的提示信息,此时即可输入要搜寻的内容。

(reverse-i-search)`‘:

(3)可以使用如下的组合键提取上一个命令最后面的参数,即

顺序地按Esc+.键

同时按Alt+.键

7、bash变量简介及大括号{}的用法

shell变量就是内存中一个命了名的临时存储区。变量中所存储的信息有以下两种:

(1)按用户的习惯定制shell所需的信息

(2)使一些进程正常工作所需的信息

在Linux系统中有一个名为PATH的预定义变量,在这个变量中存放着执行一个命令时要搜寻的路径,即如果一个命令存储在PATH所列出的任何一个路径中,用户就可以输入命令名来运行这个命令,其中每一个路径用:隔开。

[dog@dog ~]$ echo $PATH
以上的命令就可以列出PATH变量的值

使用大括号{}可以一次建立多个文件,例如:

[dog@dog mumdog]$ touch {dog,wolf}
即建立了两个文件dog和wolf

还可以创建多个文件的类型,例如:

[dog@dog mumdog]$ touch baby.{dog,wolf}
即创建了baby.dog文件和baby.wolf文件

8、讲一个命令的输出作为另一个命令的参数

[dog@dog ~]$ echo "This computer system's name is 'hostname'"
This is computer system's name is dog.super.com
9、使用Linux命令进行数学运算

[dog@dog ~]$ n1=99;n2=53
[dog@dog ~]$ echo $[$n1+$n2]
[dog@dog ~]$ echo $[$n1-$n2]
[dog@dog ~]$ echo $[$n1*$n2]
[dog@dog ~]$ echo $[$n1/$n2]
[dog@dog ~]$ echo $[$n1%$n2]
10、命令中反斜线(\)的用法

在Linux命令中有些字符已经赋予了特殊的含义,如$符号表示提取一个变量的值,如果要恢复一个特殊字符的原来含义,要在这个特殊字符之前冠以反斜线(\),即\之后的特殊字符逃脱其特殊含义而恢复原来的字面意思。

例如:

[dog@dog ~]$ echo "A baby dog's price is $6839.00"
A baby dog's price is 839.00
因为在Linux中系统将$6看成了一个shell变量。改为如下:

[dog@dog ~]$ echo "A baby dog's price is \$6839.00"
A baby dog's price is $6839.00
即可正确显示。

在命令行中,反斜线(\)还有另外一种用法。如果将反斜线(\)放在命令行的最后,就表示它是一个续行符号,即命令要在下一行继续。

反斜线(\)最后一种用法是,即放在通配符前恢复其原来的含义。

11、Linux命令中引号的用法

(1)单引号(‘):禁止所有的命令行扩展功能

(2)双引号(""):禁止所有的命令行扩展功能但以下特殊符号除外

  • 美元符号($)
  • 倒引号(`)   
  • 反斜线(\)
  • 惊叹号(!)