变量引用

  • $(VAR): 会将VAR当做一条命令来执行
  • '$VAR': 单引号中包含的变量, 不会被引用, 仍然输出$VAR
  • "$VAR": 双引号中包含的变量, 会被引用成$VAR的值输出
  • ``: 优先执行其中的命令, 用在字符串中时, 仅在""当中有效

有时需要在一个字符串变量中定义一个命令并预先包含一个变量名, 在使用时再转换成变量名, 此时可通过eval命令来达到目的.

CMD='eval echo $VALUE'
VALUE="Hello" $CMD
# 执行echo "Hello", 输出"Hello"

特殊变量

  • $0: 获取当前执行脚本的文件名,包括路径
  • $n: 获取当前执行的shell脚本的第N个参数, n=1..9, 当n为0时表示脚本的文件名, 如果n大于9, 可用大括号括起来如${10}
  • $@: 这个程序的所有参数"$1" "$2" "$3"..., 这是将参数传递给其他程序的最佳方式, 因为会保留所有内嵌在每个参数里的空白
  • $*: 获取当前shell的所有参数,会将所有的命令行参数视为单个字符串
  • $?: 代表上一个命令执行是否成功的标志,如果执行成功则$? 为0, 否则不为0
  • $#: 获取当前shell命令行中参数的总个数
  • $_: 代表上一个命令的最后一个参数
  • $$: 代表所在命令的PID
  • $!: 代表最后执行的后台命令的PID

日志输出

shell脚本开发中, 输出的语句尽量不出现在标准输出, 除非是少数的步骤提示性语句, 如果是出错信息, 应存入到自己定义的出错日志中, 以便后期维护和调试, 其它不关心的信息直接输出到/dev/null中. 否则输出信息过多, 容易耗尽缓存, 造成脚本运行卡死, 难以调试定位.

  • date: 显示日期时间的命令, 可通过此命令来作为日志的前缀, 方便定位. 一般形式为 "[ date +%Y%m%d-%H%M%S` ]"
  • &[n]: 代表已经存在的文件描述符, &1代表输出, &2代表错误输出, &-代表关闭与它绑定的描述符, 如2>&1 错误输出绑定到标准输出, 2>&- 等价于2>/dev/null

条件判断

使用[ ]判断

注意事项

[ $HOME == $MALL ]

  • [ ]中每个组件都需要空格键来分格, 其中的变量最好都以双引号括起来, 常量最好都以单或双括起来
  • [ ]中==和'='结果都完全一样, 习惯上可尽量使用==
常用参数

数值比较

  • -ne: 比较两个参数是否不相等
  • -lt 参数1是否小于参数2
  • -le 参数1是否小于等于参数2
  • -gt 参数1是否大于参数2
  • -ge 参数1是否大于等于参数2
  • -n:判断变量是否有值

文件比较

  • -f 检查某文件是否存在
  • -d 检查目录是否存在
  • -x:判断是否存在并有可执行权限
  • -d: 文件为目录为真
  • -c: 文件为字符特殊文件为真
  • -b: 文件为块特殊文件为真
  • -s: 文件大小非0时为真
  • -t: 当文件描述符(默认为1)指定的设备为终端时为真

权限比较

  • -r: 用户可读为真
  • -w: 用户可写为真
  • -x: 用户可执行为真

最新文章

  1. java常用设计模式
  2. 完美解决全面屏蔽Google教程(终结者)
  3. Java中的异常处理:何时抛出异常,何时捕获异常?
  4. JAVA GUI随笔
  5. HDU 4800/zoj 3735 Josephina and RPG 2013 长沙现场赛J题
  6. CSS中定位position
  7. Opencv--HoughCircles源码剖析
  8. linux下利用sed重命名文件
  9. new关键字
  10. Arduino live weather broadcasting 实时天气站
  11. HTML学习笔记之三(localstorage的使用)
  12. MySQL——设置库中的表以奇数自增
  13. 2017 SCNUCPC 解题报告
  14. linux 平台core dump文件生成
  15. java中的基本数据类型和引用数据类型
  16. Speeding Up The Traveling Salesman Using Dynamic Programming
  17. MACD判断定背离,底背离
  18. 【Cf #502 H】The Films(莫队)
  19. Centos设置SSH限制登录用户及IP
  20. 基于Extjs的web表单设计器 第三节——控件拖放

热门文章

  1. cocos2d3.0rc编译android工程
  2. jquery下跨域请求之代码示例
  3. Tree各种遍历实现
  4. java程序设计基础篇 复习笔记 第一单元
  5. linux中的/usr,/var,/opt目录详解
  6. 职责链模式(Chain of Responsibility)
  7. Java语言基础-运算符
  8. PentesterLab-PHP Include And Post Exploitation
  9. APUE学习笔记——6.10 时间与时间例程 time_t
  10. 熟悉linux命令