|
| 1 | +## test命令 |
| 2 | +test是shell内置命令,用来检测条件是否成立,通常和if一起用 |
| 3 | +```python |
| 4 | +test 表达式 |
| 5 | +# 或者简写,表达式和[] 之间必须有空格 |
| 6 | +[ 表达式 ] |
| 7 | +``` |
| 8 | + |
| 9 | +### test文件检测 |
| 10 | +* test -e filename: 判断文件是否存在 |
| 11 | +* test -r filename: 判断文件是否存在,并且是否拥有读权限 |
| 12 | +* -w filename: 判断文件是否存在,并且是否拥有写权限 |
| 13 | +* -x filename: 判断文件是否存在,并且是否拥有执行权限 |
| 14 | +* filename1 -nt filename2: 判断 filename1 的修改时间是否比 filename2 的新 |
| 15 | +* filename -ot filename2: 判断 filename1 的修改时间是否比 filename2 的旧 |
| 16 | +* filename1 -ef filename2: 判断 filename1 是否和 filename2 的 inode 号一致,可以理解为两个文件是否为同一个文件,这个判断用于判断硬链接是很好的方法 |
| 17 | + |
| 18 | +### test数值比较 |
| 19 | +* num1 -eq num2:判断 num1 是否和 num2 相等 |
| 20 | +* num1 -ne num2:判断 num1 是否和 num2 不相等 |
| 21 | +* num1 -gt num2:判断 num1 是否大于 num2 |
| 22 | +* num1 -lt num2:判断 num1 是否小于 num2 |
| 23 | +* num1 -ge num2:判断 num1 是否大于等于 num2 |
| 24 | +* num1 -le num2:判断 num1 是否小于等于 num2 |
| 25 | + |
| 26 | +### test字符串判断 |
| 27 | +* -z str:判断字符串 str 是否为空 |
| 28 | +* -n str:判断宇符串 str 是否为非空 |
| 29 | +* str1 = str2,str1 == str2:=和==是等价的,都用来判断 str1 是否和 str2 相等 |
| 30 | +* str1 != str2:判断 str1 是否和 str2 不相等 |
| 31 | + |
| 32 | +### 逻辑运算 |
| 33 | +* expression1 -a expression:逻辑与,表达式 expression1 和 expression2 都成立,最终的结果才是成立的 |
| 34 | +* expression1 -o expression2 : 逻辑或,表达式 expression1 和 expression2 有一个成立,最终的结果就成立 |
| 35 | +* !expression:逻辑非,对 expression 进行取反。 |
| 36 | + |
| 37 | + |
| 38 | +## [[]]用法 |
| 39 | +[[]]是shell内置关键字,也是用来检测条件是否成立,可以认为是test的升级版 |
| 40 | +```python |
| 41 | +# 表达式成立时退出状态为 0,否则为非 0 值 |
| 42 | +[[ 表达式 ]] |
| 43 | +``` |
| 44 | + |
| 45 | +```python |
| 46 | +#!/bin/bash |
| 47 | + |
| 48 | +read -p "请输入s1: " s1 |
| 49 | +read -p "请输入s2: " s2 |
| 50 | + |
| 51 | +if [[ -z $s1 ]] || [[ -z $s2 ]] |
| 52 | +then |
| 53 | + echo "字符串不能为空" |
| 54 | +else |
| 55 | + echo "s1:$s1 s2:$s2" |
| 56 | +fi |
| 57 | + |
| 58 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# shell_1.sh |
| 59 | +请输入s1: aaa |
| 60 | +请输入s2: |
| 61 | +字符串不能为空 |
| 62 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# shell_1.sh |
| 63 | +请输入s1: aaa |
| 64 | +请输入s2: bbb |
| 65 | +s1:aaa s2:bbb |
| 66 | +``` |
| 67 | + |
| 68 | +#### [[]]支持正则表达式 |
| 69 | +```python |
| 70 | +[[ str =~ regex ]] |
| 71 | +``` |
| 72 | + |
| 73 | +```python |
| 74 | +#!/bin/bash |
| 75 | + |
| 76 | +read tel |
| 77 | +if [[ $tel =~ ^1[0-9]{10}$ ]] |
| 78 | +then |
| 79 | + echo "手机号:$tel" |
| 80 | +else |
| 81 | + echo "手机号格式不正确" |
| 82 | +fi |
| 83 | + |
| 84 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# shell_1.sh |
| 85 | +13000010002 |
| 86 | +手机号:13000010002 |
| 87 | +[root@iZ8vb6ughzbdqkfd58dowoZ bin]# shell_1.sh |
| 88 | +123456qwer |
| 89 | +手机号格式不正确 |
| 90 | +``` |
| 91 | + |
| 92 | +**使用if条件时,用(())来判断数值,用[[]]来处理字符串或者文件** |
0 commit comments