变量
-
定义: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”必须被包含在“[]”之内。
在使用”[]”时,如果使用“&&"或者|”对多个条件进行连接,“&&"或者"|”必须在“[]”之外。
=~ 用来判断变量的值是否满足某个正则表达式,只能应用在双中括号中
字符串操作
-
获取变量长度: ${#VAR}
-
截取变量:
1、从指定位置开始截取字符串:${VAR:#-#} 2、从制定位置开始截取字符串,指定截取字符的长度:${VAR:#-#:#}
-
掐头截取:
#*. 删除字符串中从左向右遇到的第一个".",以及其左侧的字符 ##*. 删除字符串中从左向右遇到的最后一个“.”,以及其左侧的字符
-
去尾截取
%/* 删除字符串中从右向左第一个遇到的“/”,以及其右侧的字符 %%/* 删除字符串中从右向左最后一个遇到的“/”,以及其右侧的字符
-
替换变量中的字符串
${VAR/word/replace} 替换第一个word ${VAR//word/replace} 替换所有的word ${VAR/#word/replace} 替换行首的字符串word ${VAR/%word/replace} 替换行尾的字符串word
-
删除变量中的字符串
${VAR/word} 删除第一个word ${VAR//word} 删除最后一个word ${VAR/#word} 删除行首的word ${VAR/%word} 删除行尾的word
-
字符大小写
${VAR^^} 将变量值转换为大写 ${VAR,,} 将变量值转换为小写
-
当变量值为空或者非空时对变量进行操作
${VAR:="VALUE"} 若VAR不为空,则返回VAR的值;若VAR为空给变量赋值为VALUE并返回VALUE的值, ${VAR:-"VALUE"} 若VAR不为空,则返回VAR的值;若为空则返回VALUE,但不赋值给变量 ${VAR:+"VALUE"} 若VAR为空,则返回VAR的值(即空值);若不为空,则返回指定的VALUE值,不赋值给变量 ${VAR:?"error_info"} 变量为空时,输出bash错误,错误信息为我们指定的字符串error_info