您的位置:首页 > 运维架构 > Shell

chapter11:认识与学习bash之(1)认识shell与shell的变量功能

2015-12-30 22:56 549 查看
  使用终端的命令行就是通过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.变量内容的删除,替代与替换

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: