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

第二部分shell----二、shell 条件测试

一、基本语法

在shell程序中,用户可以使用测试语句来测试指定的条件表达式的条件的真或假。当指定的条件为 真时,整个条件测试的返回值为0;反之,如果指定的条件为假,则条件测试语句的返回值为非0值。

1.test<测试表达式> :test命令和之间至少有一个空格

2.[<测试表达式>]:该方法和test命令的用法一样,[]的边界和内容之间至少有一个空格

3.[[<测试表达式>]]:比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格。[[]]中可 以使用通配符等进行模式匹配

4.((<测试表达式>)):一般用于if语句里,双小括号两端不需要有空格,测试对象只能是整数

二、文件测试表达式

一、常用的文件测试操作符

想要把测试操作符和echo $?合在一起用,则要加分号,test  -f  /shell/chao03/file ; echo $?/----意为不管前面的是否成立,继续执行echo $?  或者 && ---- 前面命令执行成功,再打印echo $?

-a /-e: 文件存在为真,不存在则为非0----echo$?

-s:存在且大小不为零才为真

-b:文件是否存在,且为块文件,如果文件存在且是一个块设备文件

-c:文件是否存在且为字符文件,如果文件存在且是一个字符文件,则结果为0

-d :文件存在且为目录则为真

-f :文件存在且为普通文件则为真

-L:文件存在且为链接文件则为真

-u:文件是否设立sudi位,如果设置了sudi,则为0

-r: 文件存在且可读为真

-w :文件存在可写为真

-x : 文件存在可执行为真

二、案例

1.test案例

2.[]示例

是否有读写rw权限,不限制root用户,只限制普通用户;但x可执行权限限制所有用户

3.[[]]示例

如果测试的文件路径是用变量代替,那么变量一定要加引号

练习1:

Read -p "请输入一个文件名:" filepath

Test -z  "$filepath"  && echo " you must input a filename" && exit 1

Echo $filepath

Read -p "请输入一个文件名:" filepath

Test -z  "$filepath"  && echo " you must input a filename" && exit 1

!  [ -a "$filepath"] && echo "the file do not exit" && exit 2

Echo $filepath

Read -p "请输入一个文件名:" filepath

Test -z  "$filepath"  && echo "  you must input a filename " && exit 1

!  [ -a "$filepath" ] && echo " the file do not exit  " && exit 2

[ -d  "$filepath" ] &&  echo " this is directory "[ -r ]

[ -L  "$filepath" ] &&  echo " this is symbolic "

[ -f  "$filepath" ] &&  echo "this is regular "

[ -r  "$filepath" ] &&  echo "has read  "   或者 perm=r

[ -w "$filepath" ] &&  echo "has write "   或者 perm={$perm}w

[ -x  "$filepath" ] &&  echo "has execute  " 或者 perm={$perm}x

Echo $filepath  或者 echo "$filepath permission is $perm "

三、字符串测试表达式

一、常用字符串测试操作符

-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,非,两端相反,则结果为真

六、实验

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

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

Expr 先看输入的内容能不能相加

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

程序的文件名;共有几个参数;若参数的个数小于2个则告知用户参数数量太少;全部的参数内容;第一 个参数;第二个参数。


http://www.kler.cn/a/417635.html

相关文章:

  • 04树 + 堆 + 优先队列 + 图(D1_树(D10_决策树))
  • 如何自定义软件安装路径及Scoop包管理器使用全攻略
  • 记录pve中使用libvirt创建虚拟机
  • 【Envi遥感图像处理】009:envi5.6设置中文界面的方法
  • 一文讲解Spring中应用的设计模式
  • 【大数据技术】教程05:本机DataGrip远程连接虚拟机MySQL/Hive
  • Flutter 1.2:flutter配置gradle环境
  • Docker初识-架构
  • 【C++boost::asio网络编程】有关socket的创建和连接的笔记
  • 半导体制造检测新突破:XARION 激光超声无损检测系统的应用
  • element的el-table表格标题用css自定义是否必填,用添加伪类的方式标红色*
  • Ubuntu 安装 MariaDB
  • Spring Boot【三】
  • Java的类和对象
  • SMOTE | 使用SMOTE算法来处理不平衡数据的问题
  • 【Linux】【字符设备驱动】深入解析
  • LabVIEW实现UDP通信
  • Android获取状态栏、导航栏的高度
  • 【2025最新计算机毕业设计】基于SpringBoot+Vue文化创意展示与交流平台【提供源码+答辩PPT+文档+项目部署】
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第14篇:YOLOv11——在速度和准确性方面具有无与伦比的性能】
  • 动捕 动作捕捉学习笔记
  • C++内存对齐
  • 【从零开始的LeetCode-算法】263. 丑数
  • python全栈开发《67.不同数据类型间的转换:列表集合元组的转换》
  • 【Leecode】Leecode刷题之路第66天之加一
  • Maven CMD命令