shell编程知识点总结

变量
  • 定义:set、declare 撤销:unset

  • 引用:${VAR}

     shell是弱类型语言,可以把变量认为是“字符串”
     引用时可以把{}省略,但是有些情况下不能省略,比如引用的变量不是作为一个整体的“单词”来显示,需要对这个值修饰的情况下
    
  • 类型:

     针对bash来说,分为本地变量和环境变量,
     	本地变量:只对当前shell进程有效,不包括子进程;
     	环境变量:对当前shell及其子进程有效
     		定义方法:export VAR=VALUE
     针对shell脚本来说,分为局部变量和全局变量
     	局部变量:只对当前函数或代码端有效
     		定义方法:local,不加local会覆盖掉相同名称的全局变量(等于是重新定义了此全局变量)
     	全局变量:针对当前shell脚本全局有效
    

    ps: 声明一个变量为环境变量,再赋给它其他值,这时候这个变量还是环境变量而不是被重新定义成了本地变量

     只读变量:定义了之后不能重新赋值的变量,也可以理解为常量
     	定义方法:readonly VAR=VAULE 
     			export readonly BLOG=csdn  只读环境变量
    
     特殊变量:
     		$1	传入脚本的第一个参数
     		...
     		$6	传入脚本的第六个参数
     		$0	shell脚本的名称
     		$*	传入脚本的参数列表,作为一个字符串呈现
     		$@	传入脚本的参数列表,分开呈现
     			${@:起点}从起点开始,获取到最后的所有参数
     			${@:起点:个数}从起点开始,获取指定个数的参数
     		$?	上条命令执行结果状态返回值,0表示成功,1-255之间的值表示失败
    

    ps:source ./shell脚本 表示不创建子进程在当前shell中执行脚本文件,继承了本地变量,等同于. 空格 shell脚本

算术运算
  • let命令 只支持整数运算
  • bc命令 支持小数运算
  • 算术语法
    $[ 算术表达式 ]
    $((算术表达式))
逻辑运算
- 与	-a   或者  &&
	语法:[ 条件1 -a 条件2]
		 [[ 条件1 && 条件2 ]]
		 [ 条件1 ] && [ 条件2 ]
- 或	-o	 或者  ||
	语法同 &&
- 非	!

在使用“[[]]”时,不能使用”-a”或者”-0”对多个条件进行连接。
在使用“[]”时,如果使用”-a”或者”-0”对多个条件进行连接,“-a”或者”-0”必须被包含在“[]”之内。
在使用“[]”时,如果使用“&&“或者“||”对多个条件进行连接,”&&“或者“||“必须在“[]”之外。

组合命令

将多条命令组合起来当一条命令来执行有两种方法:

  • () 用小括号把多条命令括起来,中间用“;”分隔,头尾不用跟括号之间留空格

     组合起来的命令在生成的子shell进程中执行
    
  • {} 用大括号将多条命令括起来,每一条命令结尾加“;”,头尾需要跟大括号之间留空格

     组合起来的命令在当前shell进程中执行
     在函数中,一个函数的代码块会用大括号括起来,表示是一个函数整体,此处我们将多个命令用大括号括起,表示他们也是一个代码块,可以当作一个没有函数名的函数体
    
大小比较

语法:

  • 用中括号或者双中括号将比较表达式括起来,头尾与括号之间留空格
  • -lt和-gt 只能用来对数值进行比较
  • < 和 > 可以对数值和字符的ascii进行比较,但是用在单中括号中的时候必须对其进行转义,不然没有正确结果,在双中括号中可以不用转义
中括号

在linux中,[ ] 与test命令等效,双中括号可以起到转义多功能字符和变量值转换为字符串的作用

在使用“[[]]”时,不能使用“-a“或者“-0”对多个条件进行连接。
在使用“[]”时,如果使用“-a”或者“-0”对多个条件进行连接,“-a”或者”-0”必须被包含在“[]”之内。
在使用”[]”时,如果使用“&&"或者|”对多个条件进行连接,“&&"或者"|”必须在“[]”之外。

=~ 用来判断变量的值是否满足某个正则表达式,只能应用在双中括号中
字符串操作
  1. 获取变量长度: ${#VAR}

  2. 截取变量:

    1、从指定位置开始截取字符串:${VAR:#-#}
    2、从制定位置开始截取字符串,指定截取字符的长度:${VAR:#-#:#}
    
  3. 掐头截取:

    #*.	删除字符串中从左向右遇到的第一个".",以及其左侧的字符
    ##*. 	删除字符串中从左向右遇到的最后一个“.”,以及其左侧的字符
    
  4. 去尾截取

    %/*	删除字符串中从右向左第一个遇到的“/”,以及其右侧的字符
    %%/* 删除字符串中从右向左最后一个遇到的“/”,以及其右侧的字符
    
  5. 替换变量中的字符串

    ${VAR/word/replace}		替换第一个word
    ${VAR//word/replace}	替换所有的word
    ${VAR/#word/replace}	替换行首的字符串word
    ${VAR/%word/replace}	替换行尾的字符串word
    
  6. 删除变量中的字符串

    ${VAR/word}		删除第一个word
    ${VAR//word}	删除最后一个word
    ${VAR/#word}	删除行首的word
    ${VAR/%word}	删除行尾的word
    
  7. 字符大小写

    ${VAR^^}	将变量值转换为大写
    ${VAR,,}	将变量值转换为小写
    
  8. 当变量值为空或者非空时对变量进行操作

    ${VAR:="VALUE"}	若VAR不为空,则返回VAR的值;若VAR为空给变量赋值为VALUE并返回VALUE的值,
    ${VAR:-"VALUE"}	若VAR不为空,则返回VAR的值;若为空则返回VALUE,但不赋值给变量
    ${VAR:+"VALUE"}	若VAR为空,则返回VAR的值(即空值);若不为空,则返回指定的VALUE值,不赋值给变量
    
    ${VAR:?"error_info"}	变量为空时,输出bash错误,错误信息为我们指定的字符串error_info
    

你可能感兴趣的:(基础知识)