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


      使用终端的命令行就是通过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.变量内容的删除,替代与替换

  • 相关阅读:
    Failure [INSTALL_FAILED_ALREADY_EXISTS]
    在CentOS 7上构建RAID5、LVM和SAMBAserver(5)——架设SAMBAserver
    adb命令具体解释(二)——手机缺失sqlite3时操作数据库的多种解决方式
    【环境配置】Linux的经常使用命令
    windowsclient开发--使你的client执行时记住上次关闭的大小和位置
    【13】以对象管理资源
    C++ 初始化与赋值
    C++ 变量初始化规则
    C++ 构造和析构
    【20】宁以pass-by-reference-to-const替换pass-by-value
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/5090310.html
Copyright © 2020-2023  润新知