概述
一些shell 编程中的总结,希望能帮到后面的朋友,少点学习成本
若有错误,欢迎指正
脚本执行
在当前shell 中执行
- source test.sh
- . test.sh
- 开一个子shell 执行
- bash test.sh
- ./ test.sh
引申:当在一个脚本中需要用到外部脚本的变量的值,使用source 或 .
设置变量的3种方法
- export 变量名=value (等号两边无空格)
- 变量名=value ; export 变量名
- declare -x 变量名=value
单引号(' ')和双引号(" ")的区别
- 单引号( ' ' ):强引用,里面的变量值原样输出
- 双引号( " " ):弱引用,变量会转换为相应的值
变量输出两种方法
- $a
- ${a}
引申${a}: a=xxx
${a}_test --输出--> xxx_test
脚本里引用linux命令
- CMD=`ls` 反引号(tab键上面的点)
- CMD=$(ls) $()
小结: 数字变量的定义 不加双引号( " " )
其他的时候加双引号( " " )
原样输出加单引号( " " )
引申: awk 使用:正确的输出变量值
TT="test"
- awk ‘BEGIN {print " 'TT' "}’ TT 这个变量单引号外部再加一个双引号
- echo "$TT" | awk '{print $0}' 通过echo 和管道的方式
变量名赋值,两边不能有空格
- a=1 正确
- a = 1 错误
shell 中特殊且重要的变量
- $0: 获取执行脚本的文件名
- $n:获取脚本中第n个参数,n>9 ,${10}
- $#: 获取执行shell 后参数的总个数
- $*: 获取当前脚本所有传参参数,不加引号相当于 $@
- $@: 不加引号与$*一样
- $?: 获取上一个指令执行状态码 (0 成功,非零失败)
- $$:获取当前执行shell脚本中的PID
加引号后的 $* 和 $@区别
- "$@" ---> "$1 $2 $3..."
- "$*" ----> " $1" "$2" "$3" ...
shell 脚本条件测试与比较
- test <condition>
- [ <conditon> ] :linux 里的脚本大多数使用的这种,建议使用这种方式
- [[ <conditon> ]]
- ((<condtion>)) :双括号一般用于if语句,两边不需要空格
1. test -f file && echo true || echo false
2. [ -f file ] && echo true || echo false
1和2 完全等价,注意2 [ ] 两边的空格
- && || > < ... 用于 [[ ]]
- -a -0 -gt -lt ...用于 [ ]
- [ ] 测试变量要加" " ---> [ -f "$file" ] && echo true || echo false 不能是 $file 要