运维基础--Linux中bash的基础特性

bash 的基础特性以下:git

  1、命令的别名--alias 命令shell

   用来定义和显示命令的别名,unalias撤销定义的别名;可是要注意如下几点:编程

   1.alias的效果仅限于当前shell的生命期;数组

   2.若是修改.bashrc配置文件,其中保存的别名不会当即生效,只有在从新加载该文件的内容后,才会生效且永久生效;bash

   3.为了可以保证设置的别名有效,一般两种操做都要作;编程语言

 2、命令历史ide

  shell进程会其会话中保存此前用户提交执行过的命令,history是shell的内置命令函数

  1.命令语法格式:spa

  history [-c] [-d OFFSET] [n]命令行

  history -anrw [FILENAME]

  history -ps VALUE [VALUE...]

  -c: 清空命令历史;

  -d offset(偏移量):删除指定命令历史offsethistory显示出来的命令数字

  -r: 从文件读取命令历史至历史列表中;

 -w:把历史列表中的命令追加至历史文件中;

history #:显示最近的#条命令;

  

重复使用命令缓冲区中的命令

  ●!#:再一次执行历史列表中的第#条命令;

  ●!-#:执行倒数第几条命令;

  ●!!:再一次执行上一条命令;

  ●!STRING:再一次执行命令历史列表中最近一个以STRING开头的命令;


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

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

  ●ESC,.  最后一次命令中最后一个参数;

  ●Alt+.  真正终端上才可使用此用法;

  ●!^: 第一个位置的参数

  ●!:NUM  表示最后一次命令中的第NUM个位置的参数;

  ●!SEQUENCE:NUM  表示第SE条命令的第NUM个参数;

  ●!STRING:^|$|*|NUM;

2.与历史相关的bash变量

  HISTSIZE:shell进程可保留的命令历史的条数;

  HISTFILE:持久保存命令历史的文件,默认为.bash_history

  HISTFILESIZE:命令历史文件的存储历史命令数量条数;

  HISTCONTROL:控制命令历史记录的方式

    ignoredups:忽略重复的命令;

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

    ignoreboth:以上二者同时生效;

3、快捷键:

 按键组合映射成bash能够识别的命令;

 Ctrl+a:跳转至命令行行首

 Ctrl+e:跳转至命令行行尾

 Ctrl+u:删除行首至光标所在处之间的全部字符;

 Ctrl+k:删除光标所在处至行尾的全部字符;

 Ctrl+l:清屏,至关于clear


4、命令补全机制:

 % SHELL命令的执行过程:

  1.SHELL会根据用户键入“ENTER”来判断用户的输入结束;

  2.SHELL会将收集的命令信息,根据空白字符来分段:第一个分段被理解为命令字段;

  3.判断第一个字段是内部或者外部命令:若是是内部命令,直接运行;若是是外部命令,经过PATH变量所指示的路径信息,去查找相关的位置,以肯定是否存在同名文件,若是有就执行,不然报错;

  4.判断选项以及参数是否正确;%

 

两个方面的理解:

 命令自己的字符串补全&&参数的补全;


使用TAB键能够完成命令或者路径的补全:

   注意:若是给出的字符串不是惟一标识,则bash不予不全,再次TAB键,bash给出参考列表;若是参考列表中的内容过多,bash会询问是否显示该列表;


还能够根据提供的参数路径进行补全,若是参数没有任何提示字符串信息,则默认从工做目录查找;

5、shell 的命令行展开(用简单的字符实现bash可以识别的复杂信息)


~: 

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

  ~STR :bash会自动将其展开为以STR为用户名的家目录;

 ~+ :调用SHELL变量”PWD”的值;

 ~- : 调用SHELL变量”OLDPWD”


{}:在其中能够填充一个以”,”分隔的路径列表,bash会将其展开为多个独立的路径;

 例如:mkdir /{a,b}_{c,d} 建立了四个目录:a_c,a_d, b_c, b_d。


6、命令的执行结果

  1.bash经过状态返回值来输出结果:成功:0  失败:1-255

    0:命令执行成功;1,2,127: bash内置的状态返回值;1表示小问题,2表示严重问题,127表示命令自己出现问题;3-126以及128-255:用户自定义的状态信息;

  2.状态返回值保存于bash的特殊变量:$?

  3.引用命令的执行结果:$(COMMAND)或`COMMAND`


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

其一:命令的正常输出结果;

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

引用方法:

``:反向单引号—反引号;

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

   补充命令:

    wc:统计一个文件的行数,字数以及字节数;

    -c:只显示字节数

    -l:只显示行数

    -w:只显示字数;

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

  与命令执行成功与否相关的返回内容,保存在bash的一个特殊变量中:$?;


7、引用特性

 ‘ ’ :强引用,凡是被单引号引用的内容,bash一概将其视为普通字符,即使其自己有特殊功能和做业也是如此,可是单引号自己是个例外;

 “ ” :弱引用,被双引号引用的内容,有些特殊的字符仍会保留其特殊含义,好比: $、\、”


8、转义功能:

 \:bash定义的转义字符,只能使其后一个字符失去特殊含义;


9、Globbing,文件名通配,简称为glob;

  匹配模式:元字符(一组代替一个或多个字符的字符)

    具备特殊意义的专用字符,能够用来规定其前导字符在目标对象的出现模式

      *:匹配任意长度的任意字符,包括空字符

      ?:匹配任意单个字符

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

      例如[abc]、[a-z]、[A-Z]、[a-zA-Z]、[A-Z]、[0-9]、[a-z0-9]

特殊格式:

[[:upper:]]:全部大写字母

[[:lower:]]:全部小写字母

[[:alpha:]]:全部字母

[[:digit:]]:全部数字

[[:alnum:]]:全部的字母和数字

[[:space:]]:全部空白字符

[[:punct:]]:全部标点符号

   [^]:  匹配指定范围外的任意单个字符

10、输入输出重定向;

  在使用计算机时 实现某种功能的主体是:程序 (= 指令 + 数据;)

    数据是指令操做的对象,在Linux体现就是文件; 

    能够用于输入的设备也是一种文件;

     例如键盘设备,文件系统中的常规文件、网卡声卡设备;

    能够用于输出的设备:文件

     显示器,文件系统的常规文件,网卡声卡…


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

  a).输入数据流:为程序获取数据的数据流;默认的输入数据流的来源是键盘;

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

  c).错误数据流:将程序没法处理或处理过程当中出现的问题的结果展现给用户的数据流;默认错误数据流的终点是显示器;


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

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

  到显示器上的错误数据流称为标准错误输出,简称标准错误;


文件描述符:File Descriptor,FD。

  0:标准输入,stdin

  1:标准输出,stdout

  2:标准错误,stderr



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


简单来讲,

 不是从键盘设备完成的数据流输入,就能够称为输入重定向或者叫作重定向输入;

 不是到显示器设备正确输出数据流就被称为输出重定向,或叫重定向输出 



输出重定向:

  >:覆盖输出重定向

   set –C //开启防误覆盖开关,此开关启后,能够用“>|”符号继续覆盖重定向;

   set +C//关闭防误覆盖

  >>:追加输出重定向



错误重定向:

 2>:覆盖错误重定向

 2>> :追加错误重定向


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

  1).&>、&>>(并非全部bash都支持)

  2).COMMAND >|>> /PATH/TO/SOMEFILE 2>&1

11、管道:

    | 用来链接命令,注意最前的命令应该具有输出数据流的功能;


12、bash变量

  前面介绍到声明是程序,简单来讲,程序 = 指令 + 数据;

  指令引导硬件和数据操做行为;

  数据:就是文件系统中要进行管理的文件(存储在存储设备中的流式数据),而存储在内存的数据就称为变量;

  因此,变量就是一段连续的内存空间;一段内存空间被平面编址,分为若干cell--8bit;假如咱们为这一段内存空间取一个名,就称为变量名;在这段内存空间中所存储的数据,就称为变量的值;

  变量的赋值操做符:=

  赋值方法:VARNAME=VALUE;

  其中变量名VARNAME的命名规范以下:

    1.开头,只能以字母或_为首字符,不能使用数字,后面能够是任意字母数字下划线;

    2.大小写严格区分

    3.要见名知意

    4.书写规范:

      1) 全大写:FILES

      2) 驼峰式:MyFiles

    5.不能与已知变量重名;

 根据不一样的编程语言,变量能够分为强变量和弱变量两类; 

    强变量:

      必须在使用前进行声明,并且要声明变量的类型;

      例如 255:

         字符类型:3Bytes

         整数型:1Byte 

         null

    弱变量:

     能够随时使用,随时声明,甚至能够不声明;不对变量类型作硬性要求;若是没有指明变量类   型,统一按字符型对待;bash的变量即为弱变量;

下面介绍一下bash中变量的种类:

    全局变量(环境变量):做用范围是整个shell进程,包括子shell;

    本地变量:做用范围仅是当前登陆的shell,不包含子shell

    局部变量:做用范围仅是当前程序段,通常用在函数;

    特殊变量:

       $?:展开为最近一次执行命令的状态返回值(退出状态);

       $#:位置参数的个数;

       $*:从1开始展开为位置参数,当使用双引号引用展开的时候,它展开为以特殊变                量“IFS”的第一个字符分隔的值;

       $@:从1开始展开为位置参数,当使用双引号引用的时候,展开为一个单独的字符串;

       $$:展开为当前shell 的进程标识符;

       $0:展开为shell或者shell脚本的文件名;



变量的使用:

    赋值:

    撤销变量:unset VARNAME

    声明环境变量:export VARNAME

命令 declare

    -a:声明索引数组(若是支持)

    -A:声明关联数组

    -i:声明整型变量

    -l:小写字母

    -u:声明变量并将变量值中的字符转换为大写字母;

    -x:声明变量并将其导出为环境变量;

    -r:声明变量为只读变量(常量);只能进行第一次赋值; 

声明局部变量:local VARNAME=VALUE


注意:通常状况下,声明变量都是现作现用,并不须要修改配置文件;

相关文章
相关标签/搜索