bash shell 功能介绍与变量设置
计算机中管理整个计算机硬件的其实是操作系统内核(kernel),这个内核是需要保护的,所以我们一般用户只能通过shell来和内核进行通信,以让内核达成我们所要完成的工作。那么内核如何知道你执行的shell命令呢,那就是内核的控制工作了。
其实shell的功能只是提供用户操作系统的一个接口,因此这个shell需要调用其他软件才好,我们常用的一些命令就是一些应用程序软件,比如:man,chmod,vi等。我们通过shell(命令行模式)来操作这些应用程序,让这些应用程序来调用内核来完成一定的工作。
也就是说只要是能操作应用程序的接口都可以被称为shell,狭义的shell指的是命令行方面的软件。
在Centos中可以通过查看文件:/etc/shells 来检查系统可用的shell都有那些。
bash shell的功能:
bash的优点:
1、命令记忆能力:我们只需要在命令行里按键盘的上下键就可以找到前/后一个输入的命令。
2、命令与文件补全功能([Tab]键的好处):
[Tab]接在一串命令的第一个字的后面,则为命令补全
[Tab]接在一串命令的第二个字以后,则为文件补全
所以说,如果我想知道我的环境中所有可执行的命令有几个,就可以在bash提示符后面连续按两次[Tab]就可以显示所有可以执行的命令了,比如我想要知道系统中以c开头的命令,我只需要在提示符中按下“c[Tab][Tab]”就可以显示所有以c开头的命令了。
3、命令别名设置功能
我们可以为某个命令串起别名,这样我们就不用每次都输入这么长的命令串了,我们只需要执行别名就可以了,设置别名使用alias命令,例如:alias lm="ls -al"。我们也可以通过在命令行中输入alias来查看目前的命令别名有哪些。
4、作业控制,前台,后台控制
前后台的控制可以使我们的工作更加的顺利,作业控制的用途非常广泛,可以让我们随时将工作丢在后台中运行,而不怕不小心使用了“【ctrl】+ C”来中断该进程,我们可以利用他来完成很多的工作。
5、程序脚本(shell script)
以前的dos下有强大的批处理功能,Linux中的shell script 则发挥更加强大的功能,可以将你平时管理系统常需要执行的连续命令写成一个文件,该文件并且可以通过交互的方式来进行主机的检测工作。我们可以通过shell提供的环境变量以及相关的命令来进行设计,整个设计就像是一个小型的程序语言,功能很是强大。
6、通配符(Wildcard)
除了完整是的字符串之外,bash还支持许多通配符来帮助用户查询与命令执行。比如我们想查找/usr/bin下面以X开头的文件,我们使用“ls -l /usr/bin/X*”就可以了。
bash shell 的内置命令:type
为了方便shell的操作,bash已经给我们提供了很多“内置”命令了,比如cd,那么我们怎么知道一个命令是bash内置的还是来自于外部的命令(非bash所提供的命令),我们可以使用type这个命令来查看,type的格式如下:
type [-tpa] name
例如:
[root@localhost ~]# type cd cd 是 shell 内嵌 [root@localhost ~]# type ls ls 是 `ls --color=auto' 的别名 [root@localhost ~]# type -t ls alias [root@localhost ~]# type -a ls ls 是 `ls --color=auto' 的别名 ls 是 /usr/bin/ls [root@localhost ~]#
变量是bash中一个很重要的玩意,什么是变量呢,简单的说就是让某个特定的字符串代表不固定的内容。
bash shell中变量的显示与设置
首先我们来显示变量,通过echo命令我们可以显示变量,但是在显示时前面必须加上字符"$"才行,举例如下:
[root@localhost ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo ${PATH}
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $MAIL /var/spool/mail/root [root@localhost ~]# echo $HOME /root
变量的显示就如同上面的实例,利用echo就可以读取出来,只需要在变量名称前面加上“$”,或是以${变量}的形式来显示。echo的功能还有很多哦,需要自己找了。
设置变量或者是修改变量的值我们通过等号来处理。例如:
[root@localhost ~]# echo $name [root@localhost ~]# name=li [root@localhost ~]# echo $name li [root@localhost ~]#
在bash中当一个变量名称尚未被设置时,默认的内容是“空”的。其实在变量设置的时候我们还要尊许一些规则的。
下面我们来看一下变量的设置规则
1、变量与变量的内容使用一个等号“=”来连接,例如:name=li
2、等号两边不能直接接空格符,下面是错误的表示形式:
name =li,name= li,name=li test
3、变量名称只能是英文字符或者是数字,但是不能够以数字开头
4、变量内容若有空格符可以使用双引号或者是单引号将变量内容结合起来,但是有几个特殊的情况,
双引号中的特殊字符如“$”字符可以保有原本的特性,例如:
若 "var="lang is $LANG"", 则 "echo $var" 可得"lang is en_US"
单引号中的特殊字符则为一般字符(纯文本)
若 "var='lang is $LANG'", 则 "echo $var" 可得"lang is $LANG"
5、可以使用转义字符"\",把特殊符号转化成一般字符
6、在一串命令中,还需要通过其他的命令提供的信息,可以使用反单引号【·命令·】或者是【$(命令)】,特别注意是反单引号。
[root@localhost ~]# version=$(ls -a) [root@localhost ~]# echo $version . .. anaconda-ks.cfg .bash_history .bash_logout .bash_profile .bashrc .cshrc .gitconfig js-test learnGit moban1134.zip .node_repl_history .pki .rediscli_history shellTest .ssh .subversion svnPro .tcshrc test .viminfo www [root@localhost ~]#
7、若该变量为了增加变量内容时,则可用【$变量】或【${变量}】进行累加内容。
[root@localhost ~]# echo $name wei [root@localhost ~]# name="$name":test [root@localhost ~]# echo $name wei:test [root@localhost ~]#
8、若该变量需要在其他子进程执行,则需要以export来使变量变成环境变量:
export PATH
9、通常大写字符为系统默认变量,自定义的变量使用小写字符(不是规定,这是习惯称呼)
10、取消变量的方法是【unset 变量名】,例如:
[root@localhost ~]# echo $name wei:test [root@localhost ~]# unset name [root@localhost ~]# echo $name [root@localhost ~]#
变量的设置要多练,特别是一些特殊的符号的使用,单引号,双引号,转义字符,$,反单引号等。