当前位置: 首页 > news >正文

RHCE---shell 条件测试

文章目录

  • 目录

    文章目录

    前言

    一.条件测试

    概述:

     文件测试 

    整数测试:

    总结


前言

当我们完成某一命令的编写时,除了观察输出的内容,我们又如何得知命令是否执行成功呢?

这里,我们需要用到条件测试


一.条件测试

概述:

条件测试是在Shell脚本中非常重要的一部分,它们用于测试脚本中的变量或表达式是否成立。

分类:

  • test:条件测试的标准命令。例如,使用test命令测试一个变量的值是否等于某个值。

  • [ ]:方括号(中括号)是test的另一种形式,它们被称为test的别名。例如,[ $var -eq 10 ] 表示测试变量 $var 是否等于10。

  • [[ ]]:双方括号是Bash Shell的重要特性,比test和[ ]更强大,可以使用通配符等进行模式匹配,&& || > < 等操作符可以直接应用于双中括号中,但不能用于[ ]

  • (( )):该操作符用于算术运算测试。可使用数学符号> < = 不需要使用参数 例如,使用(( num > 10 )) 测试变量 $num 是否大于10。

语法格式:

  • 格式1: test  -参数 条件表达式
  • 格式2: [ 条件表达式 ]     # 注意:[]的左右要有 空格  
  • 格式3: [[ 条件表达式 ]]   # 注意:[]的左右要有 空格
  • 格式4: ((条件表达式))    #注意:不需要左右有 空格

结果测试:

  • test单独使用,判断条件为真,echo $? 真返回0,假返回1 

 案例 1

#执行成功
[root@server ~]# test -f /etc/passwd
[root@server ~]# echo $?
0
#执行失败
[root@server ~]# test -f /etc/aa
[root@server ~]# echo $?
1
[root@server ~]# test -f /etc/passwd && echo 1 || echo 0
1
[root@server ~]# [-f /etc/passwd]   # 注意:[] 中要有空格
bash: [-f: command not found...

 文件测试 

格式:如上 

参数: 

  • -f:测试是否为普通文件
  • -d:测试是否是目录
  • -e:检测文件是否存在 存在返回true
  • -s:测试文件是否为空,文件为空返回true
  • -r:存在且可读
  • -w:存在且可写
  • -x:存在且可执行

案列 1: 

[root@server ~]# [ -d /root ] && echo y || echo n
y

案例 2:编写脚本测试文件是否存在

[root@server ~]# vim temp1.sh
#!/bin/bash
FILE=$1            #$1代表位置变量,此处以及下面一行改为read -p "请输入文件名: " FILE
echo FILE        
if test -e $FILE 
thenecho  "$FILE文件已存在"
else    echo  "$FILE文件不存在,开始新建..."touch  $FILEls  -l $FILE
fi 
[root@server ~]# bash temp1.sh /etc/passwd #位置变量$1代表/etc/passwd
/etc/passwd
/etc/passwd文件已存在

整数测试:

作用:

  • 用于比较两个数值的大小关系,操作的对象是数值 

 案例:

[root@server ~]# [ 5 -gt 3 ] && echo y || echo n  
y
n

 拓展知识:

# 检查左侧内容是否包含右侧的表达式,可以使用 =~ 正则
匹配,表示是否包含
[root@server ~]# n=123
[root@server ~]# [[ "$n" =~ ^[0-9]+$ ]] && echo y || echo n
y
[root@server ~]# n=123ttt
[root@server ~]# [[ "$n" =~ ^[0-9]+$ ]] && echo y || echo n
n


总结

http://www.lryc.cn/news/205130.html

相关文章:

  • Linux下QT打开文件选择对话框时,程序报错退出
  • PyTorch中的intrusive_ptr
  • webrtc-stream编译报错记录
  • 什么是Docker CLI
  • Java项目_家庭记账(简易版)
  • vscode json文件添加注释报错
  • vue3移动端嵌入pdf的两种办法
  • 中文编程开发语言工具系统化教程初级1上线
  • 零售数据分析模板分享(通用型)
  • Spring Cloud之微服务
  • Linux命令(104)之date
  • 微信小程序投票管理系统:打造智能、便捷的投票体验
  • 【算法训练-动态规划 五】【二维DP问题】编辑距离
  • Windows电脑如何录制电脑桌面?
  • ubuntu18.04双系统安装(2023最新最详细)以及解决重启后发现进不了Ubuntu问题
  • Springboot + screw 数据库快速开发文档
  • 2 第一个Go程序
  • Leetcode—2678.老人的数目【简单】
  • 解决 /bin/bash^M: bad interpreter: No such file or directory
  • Spring Cloud之服务注册与发现(Eureka)
  • Rust-后端服务调试入坑记
  • Flask四种配置方式
  • 基于nodejs+vue备忘记账系统mysql
  • 使用Vscode创建一个C_Hello程序
  • 【31】c++设计模式——>模板方法模式
  • docker和K8S环境xxl-job定时任务不执行问题总结
  • 【Leetcode】218.天际线问题(Hard)
  • try catch finally代码块的作用
  • 【Sentinel】Sentinel簇点链路的形成
  • Elasticsearch之mapping