shell中逻辑判断与表达式,可以用来判断文件的存在性,属性。
条件表达式在条件判断时候很有用。
Tables & Code Example
逻辑卷标 | 表示意思 |
---|---|
1.关于档案与目录的侦测逻辑卷标! | |
-f | 常用!侦测『档案』是否存在 eg: if [ -f filename ] |
-d | 常用!侦测『目录』是否存在 |
-b | 侦测是否为一个『 block 档案』 |
-c | 侦测是否为一个『 character 档案』 |
-S | 侦测是否为一个『 socket 标签档案』 |
-L | 侦测是否为一个『 symbolic link 的档案』 |
-e | 侦测『某个东西』是否存在! |
2.关于程序的逻辑卷标! | |
-G | 侦测是否由 GID 所执行的程序所拥有 |
-O | 侦测是否由 UID 所执行的程序所拥有 |
-p | 侦测是否为程序间传送信息的 name pipe 或是 FIFO |
3.关于档案的属性侦测! | |
-r | 侦测是否为可读的属性 |
-w | 侦测是否为可以写入的属性 |
-x | 侦测是否为可执行的属性 |
-s | 侦测是否为『非空白档案』 |
-u | 侦测是否具有『 SUID 』的属性 |
-g | 侦测是否具有『 SGID 』的属性 |
-k | 侦测是否具有『 sticky bit 』的属性 |
4.两个档案之间的判断与比较 ;例如『 test file1 -nt file2 』 | |
-nt | 第一个档案比第二个档案新 |
-ot | 第一个档案比第二个档案旧 |
-ef | 第一个档案与第二个档案为同一个档案 link之类的档案 |
5.逻辑的『和(and)』『或(or)』 | |
&& | 逻辑的 AND 的意思 |
ll | 逻辑的 OR 的意思 |
比较有趣的应该算是 1, 3 这两种种类的判断,尤其是在建立一些 permission 相关的档案时,这个就更重要了!然后那个『两个档案之间的判断』也是挺有意思的!有空的话不妨去试一试去!还有,那个 && 及 || 这两个东西也是很重要的!接着下来,我们要来谈一谈运算符号啰!
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log" #这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi #这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi #这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi #其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi #两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
运算符:
代表意义 | |
---|---|
= | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
-eq | 等于 |
-ne | 不等于 |
-lt | 小于 |
-gt | 大于 |
-le | 小于或等于 |
-ge | 大于或等于 |
-a | 双方都成立(and) |
-o | 单方成立(or) |
-z | 空字符串 |
-n | 非空字符串 |