学习BASH
在上一篇《连接Linux内核的桥梁:Shell》中,我们知道,Linux默认使用bash
,本篇将对bash的核心概念进行简要的介绍。
其实,只要你接触到Linux系统,你就已经和bash打上交道了,在控制台上,你输入各种命令,执行各种操作,都是在使用bash。在bash中,有一个重要的概念,那就是环境变量。
环境变量
当我们登陆到Linux后,每个用户会进入到当前用户的Home目录下。比如,用户foo会进入到/home/foo目录中,而用户bar会进入到/home/bar目录中,这正是因为系统设置了默认的环境变量。
那当前shell环境中,到底有哪些默认的环境变量呢?
可以使用env来进行查看
env
会显示一些如下的信息:
SHELL=/bin/bash
USER=foo
...
MAIL=/var/spool/mail/foo
LANG=en_US.utf8
...
HOME=/home/foo
这里省略了一些信息,我们发现,每个变量都是用键值对的方式显示的(通过=
连接),等号左边是变量名,等号右边是变量的值。因为这些变量是系统内定
的变量,所以都是用大写字母
命名的,如果是自定义的变量,一般使用小写字母
。
查看
直接echo可以查看相关变量的值:
echo $HOME
HOME变量的值就会显示出来,当然,如果换成$PATH,那么显示的就是PATH变量的值。
设置
上面我们看见的都是大写字母的系统内定的变量,如果我们自己要定义一个变量,要怎么做呢?其实,要设置一个变量很简单:
name=foo
等号左边是变量名,右边是值,请注意,等号两边不能有空格。
而取消设置,使用unset即可:
unset name
则name这个变量就取消了。
export
export能够导出自定义的变量,比如共享自己的变量给后来调用的文件或者进程。格式如下:
export custom_name
上面就产生了一个新变量custom_name,其他文件或者进程只要调用这个变量,就可以直接使用了。
declare
主要作用为声明变量的类型
,我们来看一个例子:
sum=1+2+3
定义了一个sum变量,将1+2+3赋值给sum,那现在sum等于多少呢?
通过echo $sum
,发现结果为1+2+3
。奇怪了,怎么没有帮我们求和呢?
这是因为bash默认变量类型为字符串
,那为了得到求和的整数,需要使用declare来定义:
declare -i sum=1+2+3
-i参数表示后面sum变量的类型为integer,这样sum的值就是整型6了。
bash的主要功能
bash是比较复杂的,功能也很强大,那么bash的主要功能有哪些呢?
主要功能有如下几点:
- 历史命令
- 命令和文件的补全功能
- 命令别名的设置
- 前后台的控制
- 通配符(wildcard)
history
命令来查看历史命令;bash中的命令支持【tab】
键来补全;可以通过alias
来设置相关的命令别名;bash中是包含前后台的概念的,即子进程
和父进程
;另外,其还支持通配符
,比如,使用*可以代表【0到无穷多个】
任意字符。我是内置命令吗?
bash内置了很多命令,比如上面提到的echo、history、alias等,那如何判断某个命令是否为内置命令呢?
可以使用type
这个命令来进行判断。
type echo
将提示echo is a shell builtin
,则说明是一个内置命令。如果不是内置命令,比如man,则提示man is bashed(/usr/bin/man),这说明man不是shell内置的命令。
小结
bash的内容其实比较多,难以短时间内快速掌握,但只要掌握了bash的核心概念,随着使用Linux的次数越来越多,你就会慢慢熟悉它,这是一个自然的过程。