Skip to content

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