一、变量
- 编辑变量
变量名 = 变量值
- 引用变量
$ {变量名}
{}可以省略,但某些情况不行
echo $ 变量名
- 撤销变量
unset <varname>
当某个函数使用后,可以撤销某个函数
unset -f <函数名>
- 本地变量
在当前bash中创建的变量,就是本地变量
本地变量的作用域:本地变量只在当前bash进程中有效,对当前shell之 外的其它shell进程,包括当前shell的子shell进程均无效。
局部变量
局部变量的作用域:局部变量只对当前函数或代码段有效。
local <varname> = <value>
- 环境变量
环境变量的作用域:环境变量的生效范围为当前sheli进程及其子进程
export <varname> = <value>
source ./执行脚本
使脚本在当前进程中执行,所以可以调用本地变量
- 只读变量
readonly <varname> = <value>
作用域:只在当前bash
- 特殊变量
${n} 去传入脚本的第n个参数
- 声明变量
declare <varname> = <value>
-i 为整型
-x 环境变量
-r只读变量
二、算数运算
- let
只能整数运算,不包含小数运算
let a = 1/2
-
expr
expr a = 1 \* 2
注意
1、数值与运算符号之间需要用空格隔开,否则无法进行算术运算。
2、使用expr命令进行乘法运算时,需要将"乘号"转义,否则会报错。 -
bc
scale 指定小数精度
三、逻辑运算,布尔运算,短路与,短路或
- -a 和 &&
cmd1 && cmd2
- cmd1执行成功,则执行cmd2,cmd2成功,结果为真,否则为假
- cmd1执行失败,结果为假
- -o 和 ||
cmd1 -o cmd2
- cmd1执行失败,继续执行cmd2,cmd2成功,结果为真,否则为假
- cmd1执行成功,则cmd2不会执行,结果为真
cmd1 && cmd2 || cmd3
四、组合命令的方法
统计两个目录的文件数量
(ls /dir1: ls /dir2)| wc -l
({}s /dir1: ls /dir2}| wc -l
当使用(cmd),是在子shell执行
{cmd},是在当前shell执行,命令需要空格隔开
五、-gt、-lt
$a -gt $b
判断a是否大于b,返回0,结果为真;返回1结果为假
$a -lt $b
判断a是否小于b,返回0,结果为真;返回1结果为假
六、[ ] [[ ]]
- 判断变量是否为空
简化判断
- - z选项"可以判断指定的字符串是否为空,为空则返回真,非控则返回假,-z可以理解为zero
- '-n选项"可以判断指定的字符串是否为空, 非控则返回真,为空则返回假, . n可以理解为nozero
变量处理、字符串操作
- 获取变量长度
echo ${#<varname>}
- 截取变量
截取的方向是从左到右
从指定位置开始截取变量
echo ${<varname>: 4} 从第四个字符截取到末尾
echo ${<varname>: -4} 从倒数第四个字符截取到末尾
从指定位置开始截取变量,指定截取一定长度
echo ${<varname>: 4 : 4} 从第四个字符截取四个字符
echo ${<varname>: -4 : 4} 从倒数第四个字符截取四个字符
掐头去尾截取
-
掐头截取
echo ${<varname># * A} 从左到右,删除第一个遇到的A,及其左侧的字符,保留右侧的字符
echo ${<varname># #* A} 从左到右,删除最后一个遇到的A,及其左侧的字符,保留右侧的字符 -
去尾截取
echo ${<varname>% * A} 从左到右,删除第一个遇到的A,及其右侧的字符,保留左侧的字符
echo ${<varname>%% * A} 从左到右,删除最后一个遇到的A,及其右侧的字符,保留左侧的字符
- 字符串大小写转换
echo ${<varname> ^^} 将变量中的小写字母转换为大写字母
echo ${<varname> ,} 将变量中的大写字母转换为小写字母
- 空或非空使对变量操作
${<varname> := ‘value’} 作用与上图相同,会赋值
${<varname> :- ‘value’} 值为空,打印value,不会赋值
${<varname> :+ ‘value’} 值为不空,打印value,值为空,返回变量本身既空值
${<varname> :? ‘error’} 值为空,返回错误信息
- 删除字符串
删除变量中第一个遇到的指定字符串
echo ${<varname> / str}
删除变量中所有的指定字符串
echo ${<varname> // str}
删除变量中位于行首的指定字符串
echo ${<varname> /# str}
删除变量中位于行尾的指定字符串
echo ${<varname> /% str}
- 替换字符串
替换第一个遇到的str1替换成str2
echo ${var / str1 / str2 }
将变量值中所有的str1替换成str2
echo ${var // str1 / str2}
将变量值中位于行尾的str1替换成str2
echo ${var/%str1/str2}