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到当前用户目录