我是靠谱客的博主 美满大米,最近开发中收集的这篇文章主要介绍判断式1. 判断式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 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)
-gtn1大于n2(greater than)
-ltn1小于n2(less than)
-gen1大于等于n2(greater than or equal)
-len1小于等于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

范例:
让用户输入一个文件名,我们判断此文件是否存在

  1. 不存在则给予【Filename does not exist】信息,并中断程序
  2. 存在,则判断它是文件还是目录,结果输出【Filename is regular file】或【Filename is directory】
  3. 判断执行者的身份对此文件或目录所拥有的权限,并输出权限数据

使用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】情况中
中括号判断的范例,范例设置如下:

  1. 当执行一个程序时,此程序会让用户选择 Y 或 N
  2. 如果用户输入 Y 或 y,就显示【OK,continue】
  3. 如果用户输入 N 或 n,就显示【Oh,interrupt】
  4. 如果不是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为分隔字符,默认为空格

假设要执行一个可以带参数的脚本,执行该脚本后屏幕会显示如下数据:

  1. 程序的文件名
  2. 参数总个数
  3. 若参数个数小于2,则告知用户参数数量太少
  4. 全部参数的内容
  5. 第一个参数是什么
  6. 第二个参数是什么
[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. 判断式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部