使用终端的命令行就是通过bash 环境变量来处理的,bash还包括变量的设置与使用,bash操作环境的构建,数据流的重定向和管道等。
一,认识bash这个shell
1.什么是shell
我们一般通过shell来和内核进行通信,因为内核是要保护的。也就是说通过shell将我们的命令与内核通信,好让崔可以控制硬件来完成工作。
其实shell只是提供用户操作系统的一个接口,因此这个shell还要通过设备别的应用程序才好,比如我们用到的vim, fdisk等命令都是独立的应用程序,但是我们可以通过shell(也就是命令行模式)来操作它们,让这些程序调用内核来完成工作。
所以我们可以说,只要能操作程序的接口都是shell,包括命令行模式与图形界面。
2.系统合法的shell与/etc/shells
shell有不同的版本,我们的系统中也不只一个shell。如文件/etc/shells中的
里面的bash是系统默认的。为什么我们系统上合法的shell会写入这个文件呢,因为系统的一些服务在运行的过程中,会去查看用户能够使用的shell。而这个查询就是通过/etc/shells这个文件。
那么用户什么时候取得shell呢?在我们登陆的时候系统就会给我们一个shell,而这个shell是记录在/etc/passwd这个文件中。内容如下
我们可以看到,取得的shell是/bin/bash.
也就是说,当我们进入系统后,Linux就会根据/etc/passwd中的内容,给我们设置一个shell(默认是bash),然后我们就可以根据上面的命令来使用。
3.bash shell功能
/bin/bash是Linux默认的shell,优点有:
(1)命令记忆功能
(2)命令与文件补齐功能
(3)命令别名功能(alias)
如我们设置下面的来代替 ls -al命令
我们可以通过type 来查看一个命令的类型。如
(4)作业的前台后台控制
后台控制可以将工作放在后台,而不怕ctrl+C中断。
(5)程序脚本
shell script的功能很强大。
二,shell的变量功能
(1)什么是变量
如上图,Linux是一个多用户多任务环境,每个人都有自己的bash,每个人都能执行mail来收发自己的邮件,那么bash怎么知道每个的邮箱是那个文件呢,这里就有一个MAIL这个变量。mail命令会主动去使用MAIL这个变量。如下
系统已经帮我们定好MAIL变量。
影响bash环境操作的变量
如前面说到的PATH变量,当在执行命令的时候就会通过PATH记录的路径来查找命令,如果找到则执行。
正如上面据说,在进行bash之前,系统要有一些变量来提供它的数据访问,这就是环境变量了,例如PATH,MAIL,HOME等,为了区别与自定义变量的不同,环境变量使用大写。
(2)变量的显示与设置echo,unset
变量的显示:
echo $PATH or echo ${PATH} 两种。
a.变量的设置
如上所示,先确定chuiyuany变量还没有设置过,然后再设置,注意,等号两边没有空格。
b.如果在一串命令中还要别的命令提供信息
可以使用反单引号(是1,而不是真正的单引号)``或者$,如设置版本号:
c.给一个变量增加内容
增加也可以使用
version=${version}lisjs
d.变量想再其它进程使用
就要用export来使命令变为环境变量,上面的设置,如果我们再开一个shell就会发现version变量没有了,这里就要设置成环境变量,如下
还没有成功(并不是没有成功,是因为环境变量是存在到子进程中,要理解这句话)
通常大写为系统默认的变量,自己设置的可以使用小写。
e.取消变量unset
反单引号的作用:
里面的命令会优先执行,其结果将作为外部的输入信息,如
变量的一个有趣的应用,这样我们以后就可以很快的进行一个目录了。
(3)环境变量的功能
有文件的查找等,使用env查看环境变量
可以看到里面有很多环境变量,重要的有PATH,它是执行命令的查找路径。export也可以查看,但是它还有将一般变量设置成环境变量的功能。
用set查看所有的变量
里面有$(本shell的PID),?(上一个执行命令的回传码),我们可以使用echo $$ /echo %? 分别查看。
(4)export将自定义的变量设置成环境变量
子进程只能继承父进程的环境变量,而不会继承父进程的自定义变量。如果想让自定义变量变成环境变量,可以使用export。
3.变量键盘的读取,数组与声明:read,array,declare
上面说到的变量的设置都是由命令行直接设置的,那是否可以由用户通过键盘输入呢,就像我们一般安装软件时的yes的输入。
(1)read
这种可以用在shell scripts里面。
(2)declare/typeset
两者功能都是声明变量的类型。语法如
declare [-aixr] variable
-a:array类型
-i:整数类型
-x:与export一样,变成环境变量
-r:readonly
变量类型默认为字符串类(不指定的情况)。
如果想将环境变量变成非环境变量,则用declare +x ariable,
注意,这里只是在一次登录中有效,如果想再次登录时还有效,只应该参考下一篇文章。
(3)数组
在写程序时可能才会用到。
4.与文件系统和程序的限制关系:ulimit
为了防止很多用户同时使用很多资源,我们可以限制用户打开的文件数量,cpu时间,内存总量等。
5.变量内容的删除,替代与替换
略