bash特性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bash特性相关的知识,希望对你有一定的参考价值。

bash特性

一、命令别名:(自定义命令)

  用alias命令查看

  alias命令可以用来定义和现实命令的别名

  但是使用alias命令定义的别名,其生命仅为当前shell的生命期

  对于每个用户来说,都有一个私有的bash文件,用于保存别名;

  ~/.bashrc

  注意:

  1、alias命令的效果仅限于当前shell的生命期

  2、如果修改.bashrc配置文件,其中保存的别名并不会立即生效,并且在重新加载按该文件内容后,才会生效。并且永久生效

  3、为了保证设置的别名有效,通常两种操作都要做

  撤销别名:

  unalias:只需+别名名称

二、命令历史:

  bash命令会保存用户曾经执行的命令,方便用户重复执行命令

  通过bash提供的历史命令文件来永久保存以前执行过的命令,每个用户都有其私有的历史文件

  登录shell时,bash会自动读取~/.bash_history文件所记录的所有

  -c清空历史缓冲区的历史命令

  -d OFFSET删除特定历史条目

  重复使用上一个命令:

  1、上方向键

  2、ctrl+p

  3、!-1

  4、!!

  重复执行缓冲区中的命令:

  !#重复执行历史编号为#的命令

  !type从历史缓冲区中查找最后一次执行过的以“type”开头的命令,并执行

  !?type从历史缓冲区中查找最后一次执行过的包含“type”的命令,并执行

  !-#执行缓冲区中倒数第#条命令

  ctrl+r在历史缓冲区中实施搜索,回车执行即可

  重复使用历史命令中的一部分:

  !$:表示最后一次命令中最后一个参数

  Esc,.同上

  Alt+.同上上

  !^表示第一个位置的参数

  !:#表示最后一个命令中第#个位置的参数

  !SEQUENCE:NUMBER表示在历史缓冲区中第SEQUENCE个命令第NUMBER个参数

  !STRING:^|$|*|NUMBER

 与历史相关的bash变量:

  HISTSIZE

  HISTFILESIZE

    HISTTIMEFORMAT=“%F %T”

  HISTCONTROL:

    ignoredups忽略连续且相同的命令的历史缓存

    ignorespace忽略以空白字符开头的命令

    ignoreboth以上两个功能都启用          ctrl+c-->结束当前命令的运行

三、快捷键                                ctrl+u-->删除光标所在位置至行首的命令信息

  C-->ctrl                                ctrl+k-->删除光标所在位置至行尾的命令信息

  M-->alt                                 ctrl+l-->清屏

  E-->esc                                 ctrl+a-->光标跳转命令行首

  DEL-->backspace                         ctrl+e-->光标跳转命令行尾

四、命令补全机制:

  两个方面的理解:

   命令本身的字符串补全

   参数的补全

 shell的执行过程:

  1、shell会根据输入enter判断用户的输入结束

  2、shell会将手机的命令信息,根据空白字符来分段,第一段理解为命令字段

  3、判断第一字段是内外命令 ,如果是内部则直接运行,如果是外部命令,通过pash变量所指示的路径信息。去查找相关的位置,已确定是否存在同名文件,如果有,则运行,没有,报错。

  4、判断选项是否正确,判断参数是否正确

使用tab键可以完成命令补全:

  如果输出的字符串不能作为唯一标识,则bash不予补全,再次敲击tab键,bash会给出参考列表 ,如果参考列表中的参数过多,bash会显示是否显示该列表

  根据参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找

五、命令行展开:

  ~:bash会自动将其展开为当前用户的家目录

  ~STRING:bash会自动将其展开为“STRING”为用户的家目录

  ~+:调用shell变量“PWD”的值

  ~-:调用shell变量“OLDPWD”的值

  


{ }:在括号中可以填充以“,”分割的路径列表,bash会将其展开为多个独立的路径

六、命令的执行结果:

  任何一个Linux命令都有两种执行结果:

   其一:命令的正常结果

   跟用户需求相关的返回内容

   ``:反向单引号,反引号

   $():反标准的命令引用格式

   其二:命令的执行状态返回值

   跟命令执行成功与否相关的内容

   保存在bash的一个特殊变量中

   0:命令执行成功

   1,2,127:bash内置状态返回值

   1:小问题

   2:严重问题

   127:命令本身出现问题

   3-126,128-255:用户自定义用户信息

  wc统计一个文件中的行数、字数、字节数

   -c只显示字节数

   -l只显示行数

   -w:只显示 字数

七、引用功能:

  ``:强引用:

      凡是被单引用引用的内容,bash一律将其视为普通字符,即便其本身有特殊功能和作用也是如此,单单引号本身就是个例外

“”:弱引用

      北双引号引用的内容中,有些特殊字符 仍然会保留其特殊含义 如:$ /

八、转义功能:

  \:bash中定义的特殊字符,只能是最后一个字符失去特殊意义

九、Globbing:文件名通配,简称为glob

  元字符:

  *:匹配任意长度的任意字符,某些特殊位置的“.”字符不能被匹配

  ?:匹配任意的单个字符

  []:匹配指定范围内的单个字符

     字符集:

     [:lower:]:所有的小写字母

     [[:lower:]]:统配任意小写字母

     [:upper:]:所有的大写字母

     [:alpha:]:所有的大小写字母

     [:digit:]:所有的十进制数字   

     [:allnum:]:所有的大小写字母以及十进制数字

     [:space:]:空白字符

     [:punct:]:所有的标点符号

  ^:取反匹配

快捷键:

十、输入输出重定向

  在使用计算机的时候,实现某种功能的主题是:程序

  程序=指令+数据

  数据:文件,通过IO(输入、输出)方式找到数据

  可以用于输入的设备:文件(键盘设备、文件系统中的常规文件、网卡设备、声卡设备等)

  可以用来输出的设备:文件(显示器、文件系统中的常规文件、网卡设备、声卡设备)

  每一种程序都有三种形式的数据流:

    输入数据流:微程序获取数据的数据流,默认的输入数据流的来源是键盘

    输出数据流:将程序所处理的数据结果展示给用户,默认的输出数据流的终点是显示器

    错误数据流:将程序无法处理或处理过程中出现错误的结果展示给用户的数据流,默认的错误数据流的终点是显示器

  从键盘实现的输入数据流成为标准输入

  到显示器上的输出数据流程为标准输出

  到显示器上的错误数据成为标准错误输出

 文件描述符:File Descriptor,FD

  0:标准输入(stdin)

  1:标准输出(stdout)

  2:标准错误(stderr)

 IO重定向:采用非标准设备文件实现的IO操作

  简单来说,

  不是从键盘设备完成的数据流输入就可以成为输入重定向或重定向输入

  输出重定向:

   >:覆盖输出重定向

      ~]#set -C    开启防误覆盖开关

   >>:追加输出重定向

      ~]#set +C    关闭防误覆盖开关

  错误重定向:

   2>:覆盖错误重定向

   2>>:追加错误重定向

  合并标准输入和标准输出的重定向:

   1)&>,&>>(新的)

   2)COMMAND >|>> /PATH/TO/SOMEFILE 2>$1(老的)和上面一样

  /dev/null:BlackHole,BitBucket(位桶)黑洞

  ls /tmp/a.txt &> /dev/null

  = ls /tmp/a.txt > /dev/null 2>$1  

  输入重定向:

   <:唯一  

   <<:此处文档

   <<:此处字符串

十一、管道:

   |:COMMAND1 | COMMAND2 | COMMAND3

   注意:所有用于管道连接的命令,都应该是能够有标准数据输出流的命令

  命令tee:保存并显示文档内容 

  


以上是关于bash特性的主要内容,如果未能解决你的问题,请参考以下文章

bash特性

Bash基础特性

bash基本特性

shell编程bash特性

bash特性

bash 基础特性命令引用