概述
目录
- 1. 判断式
- 1.1 利用 test 命令的测试功能
- 1.2 利用判断符号[ ]
- 1.3 shell脚本的默认变量($0、$1……)
1. 判断式
1.1 利用 test 命令的测试功能
检测系统上某些文件或相关的属性时,利用【test】命令
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
用法:
[dmtsai@study ~] test [表达式]
-eq (=) : 等于则为真
-ne (!=) : 不等于则为真
-gt (>) : 大于则为真
-ge (>=) : 大于等于则为真
-lt (<) : 小于则为真
-le (<=) : 小于等于则为真
范例:
检查【/dmtsai】是否存在
[dmtsai@study ~] test -e /dmtsai #执行结果不会显示任何信息
# -e 是测试一个【东西】在不在
上述命令执行结果不会显示任何信息,可通过【$?】或【&&】及【||】来展现结果
[dmtsai@study ~] test -e /dmtsai && echo "exist" || echo "Not exist"
Not exist #显示不存在
1.关于某个文件名的【类型判断】
例如【test -e filename】表示存在否
[dmtsai@study ~] test -e filename
参数 | 意义 |
---|---|
-e | 该【文件名】是否存在(常用) |
-f | 该【文件名】是否存在且为文件(常用) |
-d | 该【文件名】是否存在且为目录(常用) |
-b | 该【文件名】是否存在且为一个 block device |
-c | 该【文件名】是否存在且为一个 character device |
-S | 该【文件名】是否存在且为一个 socket 文件 |
-p | 该【文件名】是否存在且为一个FIFO(pipe)文件 |
-L | 该【文件名】是否存在且为一个链接文件 |
2.关于文件的权限检测
例如【test -r filename】表示可读否(但 root 权限常有例外)
[dmtsai@study ~] test -r filename
参数 | 意义 |
---|---|
-r | 检测该文件名是否存在且具有【可读】权限 |
-w | 检测该文件名是否存在且具有【可写】权限 |
-x | 检测该文件名是否存在且具有【可执行】权限 |
-u | 检测该文件名是否存在且具有【SUID】权限 |
-g | 检测该文件名是否存在且具有【SGID】权限 |
-k | 检测该文件名是否存在且具有【Sticky bit】权限 |
-s | 检测该文件名是否存在且为【非空文件】 |
3.两个文件之间的比较
例如:
[dmtsai@study ~] test file1 -nt file2
参数 | 意义 |
---|---|
-nt | (newer than)判断 file1 是否比 file2 新 |
-ot | (older than)判断 file1 是否比 file2 旧 |
-ef | 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 的判定上 主要意义在判定两个文件是否均指向同一个 inode |
4.关于两个整数之间的判定
例如:
[dmtsai@study ~] test n1 -eq n2
参数 | 意义 |
---|---|
-eq | 两数值相等(equal) |
-ne | 两数值不等(not equal) |
-gt | n1大于n2(greater than) |
-lt | n1小于n2(less than) |
-ge | n1大于等于n2(greater than or equal) |
-le | n1小于等于n2(less than or equal) |
5.判定字符串的数据
参数 | 意义 |
---|---|
test -z string | 判定字符串是否为 0? 若 string 为空字符串,则为 true |
test -n string | 判定字符串是否不为 0? 若 string 为空字符串,则为 false -n可省略 |
test str1 == str2 | 判定 str1 是否等于 str2 若相等,则返回 true |
test str1 != str2 | 判定 str1 是否不等于 str2 若相等,则返回 false |
6.多重条件判定
例如:
[dmtsai@study ~] test -r file -a -x file
# file 同时具有 r 【与】 x 权限时,才返回 true
[dmtsai@study ~] test -r file -o -x file
# file 同时具有 r 【或】 x 权限时,才返回 true
[dmtsai@study ~] test ! -x file
# file 不具有 x 时,返回 true
参数 | 意义 |
---|---|
-a | (and)两条件同时成立 |
-o | (or)两条件任何一个成立 |
! | 反相状态,不满足条件返回 true |
范例:
让用户输入一个文件名,我们判断此文件是否存在
- 若不存在则给予【Filename does not exist】信息,并中断程序
- 若存在,则判断它是文件还是目录,结果输出【Filename is regular file】或【Filename is directory】
- 判断执行者的身份对此文件或目录所拥有的权限,并输出权限数据
使用vim编辑脚本
[dmtsai@study bin] vim file_perm.sh
运行脚本
[dmtsai@study bin] sh file_perm.sh
1.2 利用判断符号[ ]
范例
查询 ${HOME} 这个变量是否为空
[dmtsai@study ~] [ -z "${HOME}" ] ; echo $?
特别注意:中括号
中括号用在很多地方,包括通配符与正则表达式等
如果在 bash 的语法中使用中括号作为 shell 的判断式,必须要注意中括号的两端要有空格符来分隔
两变量的内容是否相等
本人使用Ubuntu,一个【=】才可正常执行脚本
[ "$HOME" == "$MALL" ] #需要空格
[${HOME}==${MALL}] #不需要空格
注意
- 在 [ ] 内的每个组件都需要有空格来分隔
- 在 [ ] 内的变量,最好都以双引号括起来
- 在 [ ] 内的常数,最好都以单或双引号括起来
使用中括号比较常用在条件判断式【if…then…fi】情况中
中括号判断的范例,范例设置如下:
- 当执行一个程序时,此程序会让用户选择 Y 或 N
- 如果用户输入 Y 或 y,就显示【OK,continue】
- 如果用户输入 N 或 n,就显示【Oh,interrupt】
- 如果不是Y/y/N/n之内的其他字符,就显示【I don’t know whot your choice is】
1.3 shell脚本的默认变量($0、$1……)
脚本针对参数已经设置好一些变量名称,对应如下
/path/to/scriptname opt1 opt2 opt3 opt4 # 选项1-4
$0 $1 $2 $3 $4 # 对应变量名称
特殊变量 | 意义 |
---|---|
$# | 代表后接的参数个数 |
$@ | 代表【"$1""$2""$3""$4"】之意,每个变量是独立的 |
$* | 代表【"$1c$2c$3c$4"】c为分隔字符,默认为空格 |
假设要执行一个可以带参数的脚本,执行该脚本后屏幕会显示如下数据:
- 程序的文件名
- 参数总个数
- 若参数个数小于2,则告知用户参数数量太少
- 全部参数的内容
- 第一个参数是什么
- 第二个参数是什么
[dmtsai@study bin] vim how_paras.sh
[dmtsai@study bin] sh how_paras.sh opt1 opt2 opt3
shift:造成参数变量的号码偏移
[dmtsai@study bin] sh shift_paras.sh opt1 opt2 opt3 opt4 opt5 opt6
最后
以上就是美满大米为你收集整理的判断式1. 判断式的全部内容,希望文章能够帮你解决判断式1. 判断式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复