shell基础
shell脚本变量
查看系统环境变量
set/declare: 输出所有变量(全局和局部变量)env:显示全局变量- 常用的环境变量:
HOME用户的主目录、PWD当前工作目录、RANDOM返回一个0到32767之间的随机数、USER当前用户名
变量的声明
- 所有的变量命名默认为字符串类型(无论加不加单/双引号) 【注意:双引号中可以取变量值(类似于es6模板字符串)】
- 数字、字母、下划线. 变量与值之间不可以有空格:
name=chaos引用:$name或者${name} - 只读:
readonly name=chaos - let命令声明变量时,可以直接执行算术表达式:
let num=1+2+3 - 使用反引号:name=
ls【会将ls的执行结果(字符串)保存在name变量中】 - 使用分号(
;)标识一段命令的结束 - 转义(使用反斜杠):
echo \$hello
变量默认值
${varname:-word}: varname不存在就返回word${varname:=word}: varname不存在就返回word,并且设置varname变量的值为word
位置参数变量
sh hello.sh xxx xxx$0: 获取shell脚本文件名$n: n=1-9, 获取第n个参数,大于9需要写$$#: 获取所有参数的个数$@: 获取所有参数【for循环时类似于数组,会逐个打印出参数】$*: 获取所有参数【for循环时会把所有参数当成一条字符串输出】
特殊变量
$?: 执行成功返回 0 , 执行失败返回1-255$!: 返回上一次后台进程的PID【例如执行nohup bash ./hello.sh >easynode.log 2>&1 &会返回后台运行程序的PID,如果PID只是一条简单的命令的话,程序进程执行完成后就会自行退出,此时不能再使用kill命令杀死】$$: 返回shell脚本的PID$_: 返回上次执行命令的最后一个参数
组合符
&&:echo hello && echo world前者执行成功才执行后者(且)||:echo hello || echo world无论前者是否成功都执行后者(或)
模式(符号)扩展a
~: 返回当前用户的主目录$((2 + 2)): 返回计算结果- 其他参考
字符串
- 获取字符串长度:
${#varname} - 截取子串. 两个值都可以为负值,表示从尾部截
shell
$ count=frogfootman
$ echo ${count:4:4}
foot- 转为大写:
${varname^^} - 转为小写:
${varname,,}
算术表达式
- 双括号写法:
((num = 5 + 5))(会忽略掉空格) - 支持:
+:加法;-:减法;*:乘法;/:除法(整除);%:余数;**:指数;++:自增运算;--:自减运算; - 逻辑运算:
$((3 > 2))结果为真就返回1,否则返回0 - 赋值运算:
$((a=1)) - 默认十进制
- 支持位运算
目录堆栈
cd -: cd到上一次所在目录cd ~: cd到当前用户目录