度娘说:Bash(GNU Bourne-AgainShell)是许多Linux平台的内定Shell,它能运行于大多数Unix风格的操作系统之上,甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现windows的POSIX虚拟接口。此外,它也被DJGPP项目移植到了MS-DOS上。
也就是说,从linux系统的角度来刘,Bash是用户通过命令来管理操作系统的指令集合,是屏蔽内核实现细节而向用户提供管理系统的接口。
1 Bash shell的基本功能
1.1 命令编修能力(history):
通过【上、下】键可以翻看曾经执行过的指令;此项指令记录保存在~/.bash_history文件中,通过history命令可以进行管理查看。
1.2 命令与档案补全功能: ([tab] 按键的好处):
[tab]键可以在输入相关命令或者文档名的时候,自动进行补全或者快速查看:
1) [Tab] 接在一串指令的第一个字的后面,则为命令补全;
2) [Tab] 接在一串指令的第二个字以后时,则为『文档名补齐』!
比如说:我们想输入history命令,当我们输入到hist时不记得后面怎么拼,则可以hist[tab][tab],即输入两次[tab]键,系统则自动填充,如果此时有同样前缀的命令,则在屏幕列出。再者,如查我们输入cd /ho[tab] [tab],系统则会自动补齐为:cd /home/
1.3 命令别名设定功能: (alias):
命令别名,即指我们可以用简短的几个字符表一串我们常用的命令长串,比如我们用到的history命令,如果觉得太长,难记,则可以设成alias hy=’history’来进行设定,那么,我们在命令行输入hy即等于输入history命令了。
1.4 工作控制、前景背景控制: (job control, foreground,background):
即可以将当前正在进行的工作放置到背景执行,从而可以继续其他操作;
1.5 程序化脚本: (shell scripts)
以程序编写的方式进行指令集的编写。
1.6 通配符: (Wildcard):
此项功能有点类似于正则表达式,比如我们想查/home/目录下以a开头的文件夹,则可以输入命令:ls –l /home/a*,*代表0或多个字符。
2 Bash Shell的部分介绍
2.1 命令查看指令:type
用法是type 批令名
可以查看批令的来源是外部还是系统内建等其他信息。
2.2 指令下达
输入指令后按[Enter]键则可以执行并返回结果,如果指令较长,相换行输入则可以在行末输入”\[Enter]”,即可以继续输入指令。
2.3 Shell 的变量功能
1) 变量的设定:
用『等号(=)』连接变量与他的内容:如name=keyingbo
有些设定规则需要注意:
l 变量与变量以一个等号“=”来连接,且等号两端不能有空格;
l 变量名称只能是英文字母与数字但是开头字符不能是数字,如12name是非法的;
l 变量内容若有空格符可使用双引号或单引号将变量内容结合起来,但是双引号类的特殊字符如$等,可以保留原本特性;单引号类的特殊字符则仅为一般字符(纯文本);
l 可用转义字符“\”将特殊符号变成一般字符,如”\Enter”代表命令另起一行继续输入,而不是执行。
l 在遗传命令中,还需要通过其他的命令提供的信息,可以使用反单引号`命令`或“$(命令)”
l 若该变量为了增加变量内容时,则可使用“$变量名称”或${变量}累加内容,如”$name”” helloWorld”,$name会增加后面的”helloWorld”内容;
l 若该变量需要在其他子进程中执行,则需要以export来使变量变成环境变量;
l 取消变量的方法为使用“unset变量名称”;
2) 变量的显示与取用
l 变量的显示命令:echo,比如要显示变量name则可以输入echo $name或echo ${name};
l 变量的取用:像显示一样,只是不需要echo指令,直接$name 或者 ${name}即可取用已设定好的变量name;
3) 变量的范围
l 局部变量,即在打开的命令shell中定义却没有export的变量;只能用于打开的shell的范围,如果打开shell子程序,是不可能访问得到的;
l 全局变量,即在打开的命令shell中定义并且已经export的变量;env及export命令可以显示所有定义的全局变量(环境变量),常见的环境变量及功能:HOME(用户家目录)、SHELL(当前用户所用的shell)、HISTSIZE(历史命令记录的最大数)、MAIL(用mail命令而读取的档案资料)、PATH(执行文件的搜寻路径)、LANG(语系设定变量)
l set命令:可以显示或设定全部的变量(包括局部及全局)。其他比较重要的系统变量:
PS1(命令提示符的设定):
\d :可显示出『星期月日』的日期格式,如:"Mon Feb 2"
\H :完整的主机名称。
\h :仅取主机名称在第一个小数点之前的名字,如主机则为『www』后面省略
\t :显示时间,为24 小时格式的『HH:MM:SS』
\T :显示时间,为12 小时格式的『HH:MM:SS』
\A :显示时间,为24 小时格式的『HH:MM』
\@ :显示时间,为12 小时格式的『am/pm』样式
\u :目前使用者的帐号名称,如『root』;
\v :BASH 的版本资讯;
\w :完整的工作目录名称,由根目录写起的目录名称。但家目录会以~ 取代;
\W :利用basename 函数取得工作目录名称,所以仅会列出最后一个目录名。