shell 基础知识2 ---条件测试

目录

一、条件测试的基本语法

二、文件测试表达式

三、字符串测试表达式

四、整数测试表达式

五、逻辑操作符

六、实验 


为了能够正确处理 Shell 程序运行过程中遇到的各种情况, Linux Shell 提供了一组测试运算符。 通过这些运算符,Shell 程序能够 判断某种或者几个条件是否成立 。条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以,了解和掌握这些条件测试是非常重要的

一、条件测试的基本语法

条件测试语法说明
test  <测试表达式>
test 命令和 < 测试表达式 > 之间至少有一个空格
[  测试表达式  ]
[ ]  边界和内容之间至少有一个空格
[[  测试表达式  ]]
[[ ]]  的边界和内容之间至少有一个空格。 [[]] 中可以使用通配符等进行模式匹配
((测试表达式))
一般用于 if 语句里,双小括号两端不需要有空格,测试对象只能是整数

二、文件测试表达式

常用的文件测试操作符
说明
        -a/-e 文件文件是否存在
        -b 文件
文件是否存在,且为块文件,如果文件存在且是一个块文件,则结果为0
       -c 文件
文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结果为0
        -L 文件
文件存在且为链接文件则为真
        -d 文件
文件存在且为目录则为真,即测试表达式成立
        -f 文件
文件存在且为普通文件则为真,即测试表达式成立
        -s 文件
文件存在且文件大小不为 0 则为真
        -u 文件
文件是否设置 suid 位,如果设置了 suid ,则结果为 0
        -r文件
文件存在且可读为真
        -w 文件
文件存在且可写为真
        -x 文件
文件存在且可执行则为真
f1 -nt f2 nt为 newer than
文件 f1 比文件 f2 新则为真,根据文件的修改时间来计算   stat  文件或目录查看时间
f1 -ot f2 ot older than
文件 f1 比文件 f2 旧则为真,根据文件的修改时间来计算

三、字符串测试表达式

常用字符串测试操作
说明
-n “ 字符串”
若字符串的长度不为 0 ,则为真,即测试表达式成立, n 可以理解为 no zero
-z “字符串”
若字符串的长度为 0 ,则为真, z 可以理解为 zero。可以用来判断是否为空
1”=“ 2”
若字符串 1 等于字符串 2 ,则为真,可使用 == 代替 =
1”!=“ 2”
若字符串 1 不等于字符串 2 ,则为真

四、整数测试表达式

在  [ ]  以及  test  中使用的比较符
在  (( ))  和  [[ ]]  中使用的比较符
说明
-eq==或=相等,equal
-ne!=不相等,not equal
-gt>

大于,greater than

-ge>=大于等于,greater equal
-lt小于,less than
-le<=小于等于,less equal

五、逻辑操作符

在  [ ]   中使用的逻辑操 作符
test [[ ]]  和  (( ))  中使用的逻辑操 作符
说明
-a&&
and ,与,两端都为真,则结果为真
-o||
or ,或,两端有一个为真,则结果为真
!!
not ,非,两端相反,则结果为真

 使用&&等符号的错误示例:&&不能用在 [ ] 中

[root@localhost test3] # [ -f ceshi && -f file ];echo $?
-bash : [: missing `]'
2
[root@localhost test3] # [ -f ceshi || -f file ];echo $?
-bash : [: missing `]'
-bash : -f : command not found
127
使用 && 等符号的正确示例:
[root@localhost test3] # [ -f file ] && [ -f ceshi ];echo $?
1
[root@localhost test3] # [ -f file ] || [ -f ceshi ];echo $?0
[root@localhost test3] # [ -f file ] || [ -d ceshi ];echo $?

六、实验 

实验1: 让用户输入一个文件名,并做如下判断:

1 )如果用户输入的文件为空时显示: you must input a filename ,并中断程序;
2 )如果用户输入的文件不存在时,显示 the file do not exist ,并中断程序;
3 )如果文件存在,判断该文件的文件类型和执行者对该文件所拥有的的权限。
说明:由于 root 在很多权限的限制上面都是无效的,所以使用 root 执行这个脚本时,常常会发现与 ls -l 的结果不相同。所以建议使用一般用户来执行这个脚本
#! /bin/bash
read -p "please input filename:" file
[ -z $file ] && echo "you must input a filename!!!"&& exit
[ ! -e $file ] && echo "the $file do not exit."&& exit
[ -b $file ] && echo "the $file is block" 
[ -d $file ] && echo "the $file is dir" 
[ -f $file ] && echo "the $file is file" 
[ -r $file ] && echo "has a read previlege"
[ -w $file ] && echo "has a write previlege"
[ -x $file ] && echo "has a execute previlege"
[ ! -r $file -a ! -w $file -a ! -x $file ] && echo "is not any previlege"
~              
 测试:

实验2: 通过read传入一个数字,如果传入的数字等于1,就打印1;如果等于2,就打印2,如果不等于1 也不等于2,就提示输入不对,然后退出程序。

实验3:通过read读入两个整数,并比较他们的大小

实验4:选择一个用户输入,判断是root账户还是系统账户还是普通账户 

实验5:给定文件/etc/sos/sos.conf,判断是否存在空白行,若存在则显示行 数,否则显示“无空白行提示信息

下面判断大小时:[ $num -gt 0 ] 可以写成(($num > 0))

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921872.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据指标与标签在数据分析中的关系与应用

导读&#xff1a;分享数据指标体系的文章很多&#xff0c;但讲数据标签的文章很少。实际上&#xff0c;标签和指标一样&#xff0c;是数据分析的左膀右臂&#xff0c;两者同样重要。实际上&#xff0c;很多人分析不深入&#xff0c;就是因为缺少对标签的应用。今天系统的讲解下…

Flutter-Web首次加载时添加动画

前言 现在web上线后首次加载会很慢&#xff0c;要5秒以上&#xff0c;并且在加载的过程中界面是白屏。因此想在白屏的时候放一个加载动画 实现步骤 1.找到web/index.html文件 2.添加以下<style>标签内容到<head>标签中 <style>.loading {display: flex;…

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式&#xff0c;广泛用于计算机与外部设备或嵌入式系统之间…

【深度学习之回归预测篇】 深度极限学习机DELM多特征回归拟合预测(Matlab源代码)

深度极限学习机 (DELM) 作为一种新型的深度学习算法&#xff0c;凭借其独特的结构和训练方式&#xff0c;在诸多领域展现出优异的性能。本文将重点探讨DELM在多输入单输出 (MISO) 场景下的应用&#xff0c;深入分析其算法原理、性能特点以及未来发展前景。 1、 DELM算法原理及其…

动态规划子数组系列一>最长湍流子数组

1.题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public int maxTurbulenceSize(int[] arr) {int n arr.length;int[] f new int[n];int[] g new int[n];for(int i 0; i < n; i)f[i] g[i] 1;int ret 1;for(int i 1; i < n-1; i,m. l.kmddsfsdafsd){int…

RabbitMQ3:Java客户端快速入门

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

【mongodb】社区版8:改变配置bindip和授权

更改配置 sudo systemctl restart mongod (base) root@k8s-master-pfsrv:/home/zhangbin# sudo tail -n 20 /var/log/mongodb/mongod.log 日志感觉是成功了:{"t":{"$date":"2024-11-19T19:57:47.076+08:00"

element dialog 2层弹窗数据同步问题

注意&#xff1a;本帖为公开技术贴&#xff0c;不得用做任何商业用途 element dialog 2层弹窗数据同步问题 如果嵌套dialog&#xff0c;也就是多层dialog嵌套 2个input&#xff0c;key用同样的值 会导致内外2层dialog&#xff0c;用相同key值的input会数据同步 原因如下&a…

C# 属性 学习理解记录

字段和属性 左边字段&#xff0c;右边属性 拓展&#xff0c;属性安全&#xff1a; 1、设置public private 和protected 等&#xff0c;只读&#xff0c;只写&#xff0c; 2、在get set 方法时&#xff0c;验证&#xff0c;异常时抛出错误

如何提取某站 MV 视频中的音乐为 MP3 音频

我们常常会遇到需要将视频中的音频提取出来并转换为 MP3 格式的情况&#xff0c;比如想要单独保存一段视频中的精彩音乐、演讲或旁白。简鹿视频格式转换器就是一款能够轻松实现这一需求的实用软件&#xff0c;它支持 Windows 和 Mac 系统&#xff0c;为不同操作系统的用户提供了…

SQLynx让数据库变得简单!

SQLynx让数据库管理和开发变得更简单&#xff0c;SQLynx是一款旨在简化飞客使用体验的创新型工具&#xff0c;它为数据库管理者、数据库分析师和开发人员提供了一个直观、易用、高效的平台&#xff0c;首先&#xff0c;SQLynx拥有直观友好的用户界面。无论您是新建还是导表&…

stm32f10x_tim.h(函数学习自用)

stm32f10x_tim.h 函数库 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); //时基单元配置void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDe…

Centos Stream 9安装Jenkins-2.485 构建自动化项目步骤

官网&#xff1a;https://www.jenkins.io/ 1 下载 环境准备&#xff1a; 版本支持查询&#xff1a;https://pkg.jenkins.io/redhat-stable/ 安装JDK17&#xff1a;https://blog.csdn.net/qq_44870331/article/details/140784297 yum -y install epel-release wget upgradew…

ubuntu修改成静态ip

先用ifconfg查询网卡名称 例如以下的是enp10s0 enp10s0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.100.159 netmask 255.255.255.0 broadcast 192.168.100.255inet6 fe80::127c:61ff:fe4c:ab6b prefixlen 64 scopeid 0x20<link>ether…

Canvas 前端艺术家

目前各种数据来看&#xff0c;前端未来在 数据可视化 和 AI 这两个领域会比较香&#xff0c;而 Canvas 是 数据可视化 在前端方面的基础技术。所以给大家唠唠Canvas这个魔幻工具。 Canvas 介绍 Canvas 中文名叫 “画布”&#xff0c;是 HTML5 新增的一个标签。Canvas 允许开发…

WEB攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

知识点&#xff1a; 1、文件上传-二次渲染 2、文件上传-简单免杀变异 3、文件上传-.htaccess妙用 4、文件上传-PHP语言特性 1、上传后门时&#xff0c;文件内容带.就不行 这时可以上传一个转换后的ip地址&#xff0c;ip地址对应网站包含后门代码 转换后的int会在访问的时候…

Linux驱动开发(9):pinctrl子系统和gpio子系统--led实验

在前面章节&#xff0c;我们有过使用寄存器去编写字符设备的经历了。这种直接在驱动代码中&#xff0c; 通过寄存器映射来对外设进行使用的编程方式&#xff0c;从驱动开发者的角度可以说是灾难。 因为每当芯片的寄存器发生了改动&#xff0c;那么底层的驱动几乎得重写。 那么…

Element-Ui组件(icon组件)

一、前言 本篇文章主要是对官网的Icon组件进行总结归纳Icon 图标 | Element Plus 在现代Web应用开发中&#xff0c;图标是用户界面设计中不可或缺的一部分。它们不仅提升了用户体验&#xff0c;还使得信息的传达更加直观和高效。本文主要对Element Plus 官方提供的Icon组件进行…

Echarts+VUE饼图的使用(基础使用、多个饼图功能、单组饼图对应颜色使用)

安装&#xff1a;npm install echarts --save 配置:main.js // 引入echarts import * as echarts from echarts Vue.prototype.$echarts echarts一、基础饼图&#xff08;直接拷贝就能出效果&#xff09; <div class"big-box" ref"demoEhart"><…

文件管理 II(文件的物理结构、存储空间管理)

一、文件的物理结构 文件实际上是一种抽象数据类型&#xff0c;我们要研究它的逻辑结构、物理结构&#xff0c;以及关于它的一系列操作。文件的物理结构就是研究文件的实现&#xff0c;即文件数据在物理存储设备上是如何分布和组织的。同一个问题有两个方面的回答&#xff1a;…