• bash shell


      1.什么是shell

    首先我们来看一下用户操作计算机的流程:

    用户都是通过各种各样的应用程序来指挥内核,让内核达成我们所需要的硬件任务,这个应用程序其实就在

    最外层,相当于鸡蛋的外壳一样,因此被称为shell。

    所以广义的shell包括图形界面的软件,狭义的shell指的是命令行方面的软件。

    shell依据早期的UNIX发展者不同就有许多版本,而Linux使用的这一版本被称为"Bourne Again SHell"(bash)

    你可以打开你的Linux主机下的 /etc/shells 这个文件,就可以看到你的主机可用的shell:

    2.bash shell 的功能

    ①命令记忆功能

    你曾经执行过的记录几乎都能够被记录下来,当我们在命令行中按下↑/↓就能找到前一个/后一个输入的命令;

    其实这些之前记录下来的命令是被保存在 ~/.bash_history 文件里的,有兴趣的可以 cat ~/.bash_history 看一下

    需要注意的是,这个文件记录的是前一次登录以前执行过的命令,至于本次登录所执行的命令都被暂存在临时

    内存中,本次登录注销之后,命令记录才会记录到 .bash_history 中去。

    ②补全功能

    其实就是Tab键的使用,

    Tab接在一串命令的第一个字后面,则为命令补全;

    Tab接在一串命令的第二个字后面,则为文件补全;

    例如:l [Tab] [Tab]   将显示所有可用的以l开头的命令

    ③命令别名设置

    我们常用的命令别名ll,相当于ls -l,那么这个别名是在哪里设置的呢?alias命令可以帮助你找到它

    我们也是可以自行设置命令别名的,如下:

    alias eco='ls -al'

    3.bash shell内置命令之type

    type命令用来检测一个命令的类型(bash内置命令、外部命令、命令别名)

    -t                       //显示命令类型
    -a                       //显示路径
    -p                       //只有命令为外部命令才会显示路径

    4.命令执行之命令太长

    我们可以直接敲出命令然后回车执行,但是如果命令太长怎么办呢,此时就要用反斜杆来转义了()

    利用 [Enter] 使得光标跳到下一行,继续书写命令(回车要紧挨着反斜杆)。

    5.变量

    变量就是以一组文字或符号等,来替代一些设置或者是一串保留的数据。

    变量的显示:echo;变量的销毁:unset;变量的设置:用=号直接赋值。

     如下命令中:bash用于打开一个shell子进程,exit用于退出该子进程,export将该进程中的变量变为环境变量。

    其实这里的进程有点模块化的意思,a进程(模块)里声明的变量b进程(模块)里当然找不到,除非export

    如果你了解过模块化的话,这段话应该不难理解。

    这方面的内容可以参考我以前写的一个拖拽模块或者ES6的模块化相关知识。

    6.环境变量

    env 命令查看环境变量和变量说明(set命令可以查看自定义变量和环境变量):

    7.PS1 变量

    图中红框的内容是可以自行设置的,这个设置的命令就是修改PS1变量,格式如下:

    PS1='[u@h w A ##]$'
    d                                  //显示星期 月 日
    H                                  //显示完整的主机名
    h                                  //显示主机名第一个小数点之前的名字
    	                                  //显示24小时制的时间到秒
    T                                  //显示12小时制的时间到秒
    A                                  //显示24小时制的时间到分钟
    @                                  //显示12小时制的am/pm样式
    u                                  //目前用户的账号名称
    v                                  //bash的版本信息
    w                                  //完整的工作目录名称
    W                                  //利用basename函数取得的工作目录名称
    #                                  //执行的第几个命令
    $                                  //提示符,如果是root提示符就是#,否则是$

    8.其他变量相关操作

    read test                                        //接下来光标会跳到下一行,让你为这个变量设置一个值
    read -p "Please type your name:" -t 30 name      //要求为name变量设置一个值,并给出提示语,等待输入的时间为30s

    declare/typeset [options] 变量                     //设置变量的类型
    -a                                                //数组类型(array)
    -i                                                //整数类型(integer)
    -x                                                //和export一样,将变量设置为环境变量
    -r                                                //将变量设置成readonly

    注意:变量设置默认类型是文字类型(字符串)

     

    9.变量内容的删除、替换

    前面我们知道变量在不声明类型的情况下,默认类型就是文本类型,那么变量内容的操作实际上就是字符串操作

    先复制系统环境变量PATH到自定义变量path,后续的操作就在path变量上进行:

    删除:

    删除的命令是:echo ${path#/*:}

    这样就会从前面开始找符合 /*:  这种格式的字符串,不出意外,首先匹配到的是 /usr/local/sbin: 于是这段就被删除了

    #                                       //一个#表示从前面开始匹配,删除符合条件的最短的字符串
    ##                                      //两个#表示从前面开始匹配,删除符合条件的最长的字符串
    %                                       //一个%表示从后面开始匹配,删除符合条件的最短的字符串
    %%                                      //两个%表示从后面开始匹配,删除符合条件的最长的字符串

    替换:

    替换的命令是:echo ${path/bin/BIN}

    将第一个/bin  替换为  /BIN

    /bin/BIN                                          //将第一个符合条件的进行替换
    //bin/BIN                                         //将所有的符合条件的进行替换
  • 相关阅读:
    如何与多个线程的操作epoll fd
    谈谈Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
    JAVA实现实用的ZIP压缩与解压
    HornetQ
    github
    实例解析shell子进程(subshell )
    Linux Shell Scripting Tutorial (LSST) v2.0
    java中byte数组与int类型的转换(两种方式)
    inotifywait实现目录监控
    子shell的$$
  • 原文地址:https://www.cnblogs.com/eco-just/p/9576577.html
Copyright © 2020-2023  润新知