5自学——Linux的学习进度与任务shell中bash的特性

Posted 樱桃挚爱丸子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5自学——Linux的学习进度与任务shell中bash的特性相关的知识,希望对你有一定的参考价值。

shell中bash的特性

shell中bash的特性

bash特性之一:命令行展开  

  把命令行的给定的一个特殊符号自动替换为别的字符串的机制

目录:

  命令:cd 【内置命令】  

      工作目录:当前所处的目录

      cd:change directory(切换目录)

      cd 目标路径(不能是一个文件必须是一个目录)

      所有从根起始的都是绝对路径:/文件名

      基名:路径最后一个文件的名字

       /x/y/z/m/n: 目标路径
       /x/y/z/m: 是目录名或者路径名

           两个命令:
          获取路径的基名:   # basename
          获取路径的目录名:# dirname

  注意: 文件名可以使用除/(路径分割符)以外的任意字符(空白符也是可以),但是不要使用特殊字符,且总长度不能超过255个
      严格区分大小写

 

  注意:~ 相当于 /home   

    如果要切换到根目录下的目录具体操作:# cd /USERNAME(可以是空文件或者目录)只有管理员可以此操作

  如果要切换到家目录具体操作:# cd  或者 # cd ~

  如果要切换到家目录下的目录具体操作:# cd ~USERNAME(可以是空文件或者目录)只有管理员可以此操作

  # cd -  返回上一次所在的目录

  # cd .  :  切换到当前目录

    # cd .. :切换到父目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思)

  # cd ../.. :切换上两级目录;

    # cd !$ 把上个命令的参数作为cd参数使用

  

   {}:可承载一个以逗号分隔的路径列表,能够将其展开为指定的多个路径

       例如:

                 /tmp/{a,b,c}   /tmp/a /tmp/b /tmp/c

                    /tmp/{a,b}/z   /tmp/a/z /tmp/b/z

  # pwd:显示当前目录    print working directory
  # mkdir:创建目录 make directory
        -p: 先创建父目录
        -v:显示详细信息
 

  # rmdir:删除空目录  remove directory  

   

   

   

   

 

  命令:ls

  # ls : 查看文件(注意:在一个目录下的其他目录都是该目录的文件,一切皆文件

补充:

  命令行编辑

      光标跳转
            Ctrl+a:跳到命令行首
            Ctrl+e:跳到命令行尾
            Ctrl+u:删除光标至命令行首的内容
            Ctrl+k:删除光标至命令行尾的内容
            Ctrl+l:清屏

bash特性之二:shell的引用

   (单引号)\'\'强引用,变量替换不会进行
    (双引号)"":弱引用,能够执行变量替换
    (反引号)``:命令引用(替换),引用命令的执行结果,命令替换的另外一符号:$(命令)

  变量替换:${变量名}
        # echo : 回显变量值

        


  命令引用

        

 

bash的特性之三:命令历史

      bash保存的过去曾经执行的命令的列表
     当前shell进程保存在缓冲区中
     缓冲区中的命令会在shell退出时保存至文件中,.bash_history
       使用上下箭头键可以翻看此前曾经执行过的命令

     history快捷方式:

        !#:     #为命令历史列表中的命令编号,可用执行第#条命令
        !!:      执行上一条命令(重复执行,执行过的命令)
        !-#:   执行命令历史列表中的倒数第#条命令
      !string:   执行命令历史列表中最近一次以string开头的命令
        !$:     引用上个命令的最后一个参数 先按ESC,再按.          

             !$ 同 {Esc,.} 或 {Alt+.}



      history常用选项:

                 -c :    清空列表

           -d# :   删除指定的历史命令

          -a  :    追加当前会话的命令历史到历史文件中

          -n  :    从历史文件中读取所有未被读取的行

              -r      读取历史文件并将内容追加到历史列表中  



      命令历史相关环境变量:

              HISTSIZE:命令历史中可以保存的命令的个数

              HISTFILE:命令历史文件

              HISTFILESIZE:命令历史文件可以保存的命令的个数

              HISTCONTROL:控制命令历史生成

                    ignoredups:忽略记录重复的命令,连续相同命令才为重复
                    ignorespace:不记录以空白字符开头的命令
                    ignoreboth:同时具有以上值的特性

      补充:Linux文件系统的另外一特性:以点号开头的文件为隐藏文件:# ls -a:才能查看隐藏文件
      # cat 查看文本文件内容

     shell中的变量赋值:
            变量名=值
              注意:变量在赋值时不能使用$,而$只在变量替换时使用
                 变量名只能包含字母,数字和下划线,而且不能以数字开头
                 变量名区别大小写:

 

bash的特性之四:命令别名(alias)

      alias :显示当前shell中定义的所有别名

      

        命名别名

          # alias 别名=\'原始命令\'(没有空格可以不加引号)

        撤销别名

         # unalias 别名

 

bash的特性之五:globbing, 文件名通配

    通配符:
      *:匹配任意长度的任意字符
        abc abb abm xab ab
        ab*
        *ab
        *ab*

      ?: 匹配任意单个字符(全文件名精确匹配)

      []: 匹配指定字符范围内的任意单个字符
        a[xyz]b:
        [a-z]
        [A-Z]
        [0-9]
          [0-9a-zA-Z] 默认情况下是不区分大小写

            [[:upper:]] = [A-Z] 所有大写字母

            [[:lower:]]    所有小写字母
            [[:alpha:]]    所有字母表
            [[:digit:]]      所有数字
            [[:alnum:]]     所有字母表+数字
            [[:space:]]    所有空白符
            [[:punct:]]    所有标点符号
            [^]:        匹配指定字符范围外的任意单个字符
            [^0-9]=[^[:digit:]]

   

  练习

      复制/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位数字的文件或目录至/tmp下

        l*[0-9]*[[:lower:]]

 

      1、复制/etc目录下以p开头,中间跟了任意字符,并以d结束的文件至/tmp目录中:
      2、复制/etc/目录下以p开头,中间跟了4个任意字符,并以d结尾的文件至/tmp/a目录中:如果a不存在,先创建出来
      3、复制/etc/目录下以任意一位数字开头,并以非数字结尾的文件至/tmp/b目录下
      4、复制/etc/目录下以非字母开头,后面跟了一个字母及其他任何长度字符的文件至/tmp/c目录中

      1、cp -r /etc/p*d/tmp
      2、cp -r/etc/p????d /tmp/a
      3、cp -r/etc/[0-9]*[^0-9]/tmp/b目录下
      4、cp -r/etc/[^[:alpha:]][[:aipha:]]*/tmp/c

 

bash的特性之六:快捷键

      Ctrl+a:跳至命令行首
      Ctrl+e:跳至命令行尾
      Ctrl+u:删除命令行首至当前光标所在处的内容
      Ctrl+k:删除当前光标所在处至命令行尾的内容
      Ctrl+l:清屏,相当于clear命令
      Ctrl+c:终止或者取消命令
      Ctrl+z:将当前命令送至后台(fg调回命令)

 

bash的特性之七:补全功能

 

     命令补全:在PATH中搜索补全
          shell命令:内部,外部
          外部:在系统某路经下有一个可执行程序
          PATH,一组以冒号分隔的路径
          使用tab键执行补全,
      路径补全:在给出的打头路径下补全,如果没有打头路径,则为当前目录

 

 

bash的特性之八:提供编程环境

      支持使用变量
      支持程序控制
          任何一个需要执行的程序都要有一个解释器
          #!/bin/bash被称为shebang

          任何一个脚本语言想要独立执行的程序能够让内核识别的程序标记都要有一个解释器
            #!(程序执行入口)/bin/bash(此处为一个解释器)被称为shebang
            写的程序在哪个解释器上运行就要加上#!什么解释器的文件路径
            注意:务必是程序的第一行,必须顶格书写
            bash 就是将所有的命令按照一定的逻辑堆起来的程序

 

bash的特性之九:bash中的变量
    变量的类型:
        本地变量:只对当前shell进程有效,对其子shell以及其他shell都无效
            定义变量: [set]Var_Name="Value"
            引用变量: ${Var_Name} {}可以省略
            撤销变量: unset Var_Name

        局部变量:只对局部代码有效
l            ocal Var_Name="Value"

        环境变量:对其shell进程及其子shell有效:
            export Var_Name=”Value“
            Var_Name="Value"
            export Var_Name
            导出

        位置变量: 
            $1,......$n
            特殊变量:
                $0:脚本名称自身
                $?:上一条命令的执行状态
                    状态用数字表示:0-255
                            0:表示成功
                            1-255:失败,1.2.127.255预留


        变量的命名要求:
            只能使用数字、字母和下划线组成
            不能以数字开头:
            不能使用程序中的关键字:
            见名知义:totalWeight

        不带任何参数的set,显示当前系统的所有变量

        环境变量:用来定义bash的工作特性,由于保存当前会话的属性信息

             显示所有环境的变量,export不带任何参数, env, printenv
             定义:export Var_Name="var name"

bash的特性之十:输入输出重定向和管道

      I/O:设备,寄存器:以文件的形式表现出来的
        I/O port

      文件描述符(句柄):file descriptor ,FD
           是内核用来追踪现在文件的
            INPUT: 标准输入,stdin,0
            OUTPUT:标准输出,stdout,1
                标准错误输出:stderr,2

       I/O重定向:
          <,<<:输入重定向
            <:输入重定向
            <<:此处创建文件

            常用于在脚本中创建文件或生成菜单
            << EOF EOF 此处生成文件

          >,>>:输出重定向
            >:覆盖输出,
            >>:追加输出

            set -C:禁止覆盖重定向至已经存在的文件
            set +C:关闭上述特性:
            >|:在-C 特性下,强制使用覆盖重定向

            设备:/dev/null:bit bucket 位桶(数据最终会被抛弃)

          错误重定向:2>,2>>,会输出正确信息
            2>:覆盖
            2>>:追加

          同时重定标准输出和错误输出:
            命令 > /path/to/outfile 2>/path/to/errfile
          定向至同一文件:
            命令 &> /path/to/somefile
            命令 > /path/to/somefile 2>&1
     管道:
        Linux:
           使用目的单一的小程序
           组合小程序完成复杂的任务

        多重管道(不能在管道中传递变量)
           command1 | command2 | command3|...
           分叉输出:tee,命令不会处理,会送到下一个管道

      bash中的算术运算:
        声明类型:
          declare
            -i:整形变量
            -x: 环境变量,类似于export
          let:
            let varName= 算术表达式
               varName=$[算术表达式]
               varName=$((算术表达式))
               varName=`expr 变量1 + 变量2 `

          除法运算有余数被省略(圆整)

          操作符:+,—,*,/,%(余数)
              +=,-=,*=,/=,%=
              let totalWeight+=1(不是算术计算故前面加上let)
              totalWeight=$[$totalWeight+1] 先计算,后赋值
              let totalWeight++

 

以上是关于5自学——Linux的学习进度与任务shell中bash的特性的主要内容,如果未能解决你的问题,请参考以下文章

6自学——Linux的学习进度与任务FHS

16自学——Linux的学习进度与任务vim编辑器及文件测试

12自学——Linux的学习进度与任务bash的配置文件

15自学——Linux的学习进度与任务bash编程之条件判断

14自学——Linux的学习进度与任务正则表达式

2自学——Linux的学习进度与任务获取命令的使用帮助