bash 脚本基础
变量
bash 变量只有字符串这一种数据类型。bash 变量可以分为环境变量和自定义的变量。
sh
env
printenv # 等价 env自定义变量:
sh
a=z # 变量 a 赋值为字符串 'z'
b="a string" # 变量值包含空格,就必须放在引号里面
c="a string and $b" # 变量值可以引用其他变量的值
e=$(ls -l foo.txt) # 变量值可以是命令的执行结果
f=$((5 * 7)) # 变量值可以是数学运算的结果也可以在前面加上 let:
- let命令声明变量时,可以直接执行算术表达式。
- let命令的参数表达式,可以包含空格。此时需要引号来引住。
sh
let foo=1+2 # foo=3
let "foo = 1 + 2" # foo=3删除变量
sh
unset导出变量
export 命令用于想子 Shell 输出变量;导出 Shell,新建子 Shell,将获得的他们的一份拷贝。
读取变量:$ 符
这里,重要的是 $。Bash 将美元符号 $ 开头的 token 解析为变量,将其扩展成变量键对应的值:
$等价于${}, 表示取一个变量的值${!xxx}, 表示间接引用,即tmp = ${xxx}; return ${tmp}。$(), 等价于``,表示取一个命令运行的结果$(()), 表示在内部进行数学算术运算并得到结果。
特殊变量
参见 特殊变量
${} 的内部语法
Bash 提供四个特殊语法,跟变量的默认值有关,目的是保证变量不为空:
sh
${varname:-word}
${varname:=word}
${varname:+word}
${varname:?message}算术运算
- 算术运算
$(())内部支持所有的 C 运算;支持空格;支持嵌套; - 内部的字符串均被视为变量,如果变量的值不存在或者不是数字,那么将会被视为
0; $(())本身作为 bash 的命令的程序返回值取决于其运算结果,和直觉刚好相反。如果运算结果是0则返回1,否则返回0。
字符串运算
长度
${#varname} 用于获取 varname 的长度。
字串提取运算
${varname:offset:length} 用于提取字串。varname 必须是合法变量。
改变大小写
sh
# 转为大写
${varname^^}
# 转为小写
${varname,,}