shell编程知识点总结

2019-07-06 0 条评论 496 次阅读 0 人点赞

变量

  • 定义: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
    

once

这个人太懒什么东西都没留下

文章评论(0)