1. if 判断的写法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if [ exp1 ] then cmd1 else if [ exp2 ] then cmd2 elif [ exp3 ] then cmd3 else if [ exp4 ]; then cmd4 else cmd_default fi |
2. 内建测试结构[]和[[]], [[]]内可以正常存在&&, ||, <, >等操作符。相比之下[]会报错。如:
1 2 |
if [ $a = "abc" && $b = "cdf" ]; then #会报:missing `]' ...... |
1 2 |
if [[ $a = "abc" && $b = "cdf" ]]; then #正常 ...... |
3. 可以用&& 和 || 分别表示if[];then 和ifnot[];then
4. ((…))和let …, 当算数表达式的结果非零时,返回退出状态码0
5.文件测试
-e 文件存在
-f 是一个一般文件,不是目录或设备文件
-d 是一个目录
-b 是一个块设备
-c 是一个字符设备
-p 是一个管道
-h or -L 是一个符号链接
-S 是一个socket
-s 文件大小不为0
-r 有可读权限
-w 有可写权限
–x 有可执行权限
-N 从文件上一次被读取到现在为止, 文件夹否被修改过
f1 -nt f2 文件f1比文件f2新
f1 -ot f2 文件f1比文件f2旧
f1 -ef f2 文件f1和文件f2是相同文件的硬链接, 或相同的软链接,或一个软链接一个硬链接都可以
-t 文件描述符被关联到一个终端设备上,一般用来检测stdin([ -t 0 ])和stdout([ -t 1 ])是否来自于一个终端
-u set-user-id (suid)标记被设置到文件上。如果一个root用户所拥有的二进制可执行文件设置了set-user-id标记位的话, 那么普通用户也会以root权限来运行这个文件。对于设置了suid标志的文件, 在它的权限列中将会以s表示。注意这样可能导致安全漏洞
-k 设置粘贴位
对于”粘贴位”的一般了解, save-text-mode标志是一个文件权限的特殊类型。如果文件设置了这个标志, 那么这个文件将会被保存到缓存中, 这样可以提高访问速度。粘贴位如果设置在目录中, 那么它将限制写权限. 对于设置了粘贴位的文件或目录, 在它们的权限标记列中将会显示t。在当代unix系统中,文件已经不使用粘贴位,只在目录中用
! 翻转测试结果
6. 整数比较
在中括号[]和双中括号[[]]中使用: -eq, -ne, -gt, -ge, -lt, -le
在双小括号(())和双中括号[[]]中使用: >, >=, <, <=
单小括号()中比较元数当成文件或文件夹处理
7. 执行运算
法一:用let,
参考: http://www.cnblogs.com/qualitysong/articles/2102582.html