Shell条件判断

一、文件类型判断

示例:

# 判断文件是否存在,存在为0, 不存在为1
[root@localhost ~]# test -e person.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]#
[root@localhost ~]# test -e aba
[root@localhost ~]# echo $?
1
# 出test外,可以使用中括号
[root@localhost ~]# [ -e person.txt ]
[root@localhost ~]# echo $?
0
[root@localhost ~]#
[root@localhost ~]# [ -d /home ] && echo "is directory" || "is not directory"
is directory
[root@localhost ~]# [ -f ./person.txt ] && echo "yes" || echo "no"
yes

1.2 文件权限判断

[root@localhost ~]# [ -r ./person.txt ] && echo "yes" || echo "no"
yes

1.3 两个文件的判断

[root@localhost ~]# touch abc.txt
[root@localhost ~]# [ person.txt -nt abc.txt ] && echo "yes" || echo "no"
no

1.4 整数比较

[root@localhost ~]# [ 1 -gt 2 ] && echo "yes" || echo "no"
no

1.5 字符串判断

示例:

[root@localhost ~]# name=zs
[root@localhost ~]# [ -z "$name" ] && echo "yes" || echo "no"
no
[root@localhost ~]# [ "abc" == "bcd" ] && echo "yes" || echo "no"
no
[root@localhost ~]# [ "abc" == "abc" ] && echo "yes" || echo "no"
yes
[root@localhost ~]#

1.6 多重判断

示例:

[root@localhost ~]# num=100
# 判断num是否存在,且大于200
[root@localhost ~]# [ -n "$num" -a "$num" -gt 200 ] && echo "yes" || echo "no"
no
[root@localhost ~]# num=201
# 判断num是否存在,且大于200
[root@localhost ~]# [ -n "$num" -a "$num" -gt 200 ] && echo "yes" || echo "no"
yes
[root@localhost ~]#

二、流程控制

2.1 if分支

if [ condition ]; then
语句
fi
或者
if [ condition ]
then
语句
fi
示例 1
[root@localhost ~]# vim iftest.sh
#!/bin/bash
#author:test
num=$1
if [ $num -ge 100 ];then
echo ">100"
fi
[root@localhost ~]# vim iftest.sh
#!/bin/bash
#author:test
num=$1
if [ $num -ge 100 ];then
echo ">100"
fi
[root@localhost ~]# chmod 777 iftest.sh
[root@localhost ~]# ./iftest.sh 102
>100

示例2:

#!/bin/bash
# author: tt
# description: 当sda1盘的占用到90%即输出警告信息
rate=$(df -h | grep "/dev/sda1" | awk '{print $5}' | cut -d "%" -f 1)
if [ $rate -ge 90 ]
then
echo "Warning ! /dev/sda1 is full"
fi
if else 双分支结构
if [ condition ]
then
语句
elif [ condition ]; then
语句
else
语句
fi
示例 1
[root@localhost ~]# vim iftest02.sh

#!/bin/bash
#author:tt

num=$1
if [ $num -gt 100 ]
then
echo "num > 100"
else
echo "num <= 100"
fi

[root@localhost ~]# chmod 755 iftest02.sh
[root@localhost ~]# ./iftest02.sh 200
num > 100

示例2:

[root@localhost ~]# vim iftest03.sh
#!/bin/bash
read -p "please input a num:" num
if [ $num -gt 10 -a $num -le 100 ]
then
echo "100>=num>10"
exit 1
elif [ $num -gt 100 -a $num -le 1000 ]; then
echo "1000>=num>100"
exit 2
elif [ $num -gt 1000 -a $num -le 10000 ]; then
echo "10000>=num>1000"
exit 3
else
echo "other num"
fi
[root@localhost ~]# chmod 755 iftest03.sh
[root@localhost ~]# ./iftest03.sh
please input a num:1000
1000>=num>100
[root@localhost ~]#

2.2 case分支

if elif else 语句一样都是属于分支语句,不同点在于, case 只能判断一种条件关系, if 可以判断多种条
件关系。
case 语法:
case $conditionVar in
"val1" # 注意此处只能有一个条件,不能像 if 那样使用复杂的多条件
若值为 val1 ,则执行这里
;;
"val2")
若值为 val1 ,则执行这里
;;
...
*)
其他变量值则执行这里
;;
esac
示例:
[root@localhost ~]# vim casetest.sh
#!/bin/bash
# author: tt
# discription: 演示case语法
read -p "please input y/n " -t 30 inchoose
case $inchoose in
"y")
echo "your input is y"
;;
"n")
echo "your input is n"
;;
*)
echo "your input is others "
;;
esac
[root@localhost ~]# chmod 755 casetest.sh
[root@localhost ~]# ./casetest.sh
please input y/n y
your input is y

2.3 for循环

1 ) 用法一
for 变量 in 1 2 3 4 ...
do
执行语句
done
示例 1
[root@localhost ~]# vim fortest.sh
#!/bin/bash
# author: tt
# description: for demo
for i in 1 2 3 4 5 6
do
echo $i
done
[root@localhost ~]# chmod 755 fortest.sh
[root@localhost ~]# ./fortest.sh
...

示例2:

[root@localhost ~]# vim fortest2.sh
#!/bin/bash
for ((i=1;i<=100;i++));
do
echo $((i));
done

示例3:

[root@localhost ~]# vim fortest3.sh
#!/bin/bash
for i in $(seq 1 50)
do
echo $(expr $i)
done

示例4:

[root@localhost ~]# vim fortest4.sh
#/bin/bash
for i in {1..50}
do
echo $((i));
done

示例5:

[root@localhost ~]# vim fortest5.sh
#/bin/bash
list="hello shell word";
for str in $list
do
echo $str
done

示例6:

[root@localhost ~]# vim fortest6.sh
#/bin/bash
for f in /tmp/*;
do
echo $f;
done

2.4 while循环

只要满足循环条件则进行循环
格式:
while [ 条件判断 ]
do
语句
done
示例:
[root@localhost ~]# vim whiletest1.sh
#!/bin/bash
i=1
s=0
while [ $i -le 100 ]
do
s=$((s+i));
i=$((i+1));
done
echo "sum = $s"
until 循环
只有条件满足才退出循环
格式:
until [ 条件 ]
do
语句
done
示例:
[root@localhost ~]# vim untiltest.sh
#/bin/bash
i=0
s=0
until [ $i -gt 100 ]
do
s=$((s+i));
i=$((i+1));
done
echo "sum = $s"

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

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

相关文章

SaaS 电商设计 (九) 动态化且易扩展的实现购物车底部弹层(附:一套普适的线上功能切量的发布方案)

目录 一.背景1.1 业务背景1.2 技术负债 二.技术目标三.方案设计3.1 解决移动端频繁发版3.1.1 场景分析3.1.2 技术方案 3.2 减少后端坏味道代码&无法灵活扩展问题3.2.1 通过抽象接口完成各自单独楼层渲染逻辑3.2.2 通过配置能力做到部分字段可配 四.升级上线(普适于高并发大…

小程序实现定位城市切换且城市根据首字母A-Z排序后端数据实现逻辑

场景&#xff1a; 话不多说后端提供数据实现步骤&#xff1a; 1.controller层 Api(tags {"[地区]-城市相关接口"}) RestController RequestMapping("region") Slf4j public class RegionController extends BaseController {Resourceprivate RegionServ…

盲人出行:科技创造美好的未来

在繁忙的都市中&#xff0c;我每天都要面对许多挑战&#xff0c;盲人出行安全保障一直难以得到落实。我看不见这个世界&#xff0c;只能依靠触觉和听觉来感知周围的一切。然而&#xff0c;我从未放弃过对生活的热爱和对未来的憧憬。在一次机缘巧合下&#xff0c;我认识了一款名…

信息系统项目管理师--项目管理概述

开展项⽬是为了通过可交付成果达成⽬标。⽬标是所指向的结果、要取得的战略地位、要达到的⽬的、要获得的成果、要⽣产的产品或者要提供的服务。 可交付成果形成的独特并可验证的产品、成果或服务。可交付成果可能是有形的&#xff0c;也可能是⽆形的。产⽣⼀个或多个可交付成…

【ArcGIS】渔网分割提取栅格图+网格化分析图绘制

ArcGIS按渔网分割提取栅格图并绘制网格化分析图 准备数据操作步骤步骤1&#xff1a;创建渔网&#xff08;Create Fishnet&#xff09;步骤2&#xff1a;栅格数据处理步骤3&#xff1a;栅格插值步骤4&#xff1a;数据关联 参考 网格化的目的是让各个数据更加标准化的进行统计。因…

C语言-指针(上)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 本篇文章将为大家介绍C语言中的核心内容-指针&#xff0c;指针在C语言的中知识内容比…

全新挑战:微软 AI 奥德赛邀您全方位 Get AI 应用技能!

点击蓝字 关注我们 AI 风暴的火速席卷&#xff0c;大语言模型的不断迭代&#xff0c;在企业面临着机遇与挑战并存的新形势下&#xff0c;许许多多的个人也在经历着职业生涯的巨大压力与变革。在这场人工智能的浪潮之中&#xff0c;AI 技能无疑是我们破局焕新的关键利器。 为助力…

Dell R730 2U服务器实践3:安装英伟达上代专业AI训练Nvidia P4计算卡

Dell R730是一款非常流行的服务器&#xff0c;2U的机箱可以放入两张显卡&#xff0c;这次先用一张英伟达上代专业级AI训练卡&#xff1a;P4卡做实验&#xff0c;本文记录安装过程。 简洁步骤&#xff1a; 打开机箱将P4显卡插在4号槽位关闭机箱安装驱动 详细步骤&#xff1a; 对…

k8s单机部署zookeeper

&#xff08;作者&#xff1a;陈玓玏&#xff09; 拉取镜像&#xff1a;docker pull zookeeper&#xff1b;编辑yaml&#xff1a; apiVersion: v1 kind: Service metadata:name: zookeeperlabels:app: zookeeper spec:ports:- name: clientport: 2181protocol: TCPtargetP…

图片说话软件一览

目录 ~~tokkingheads~~~~myvoiceyourface~~~~avatarify~~wav2lip(值得研究) 最近刷到很多古画唱歌视频&#xff0c;搜了一下&#xff0c;好多教你怎么做的&#xff0c;今天来尝试了一下&#xff0c;感觉不咋地&#xff0c;就没有成功的 tokkingheads 网页一直转圈&#xff0c;…

Python环境下一种改进的基于梯度下降的自适应短时傅里叶变换

在数字信号处理技术中&#xff0c;傅里叶变换及其逆变换是一种信号时频分析方法。该方法将信号的时域描述及频域描述联系在一起&#xff0c;时域信号可通过正变换转变为频域信号&#xff0c;频域信号可通过逆变换转变为时域信号进行分析。但傅里叶变换及其逆变换是一种信号的整…

基于阿里云平台 通过树莓派实现 1:1人脸识别

之前的学习中&#xff0c;曾经在香橙派上使用阿里云平台的服务实现过类型识别&#xff1a; 使用香橙派并基于Linux实现最终版智能垃圾桶项目 --- 下_香橙派 项目-CSDN博客 现在&#xff0c;尝试在树莓派上通过阿里云平台的服务实现人脸识别&#xff01; 通过VScode远程连接树莓…

EasyRecovery数据恢复软件2024最新版包括Windows和Mac

EasyRecovery数据恢复软件适用于多种环境和使用场景。首先&#xff0c;它适用于各种操作系统&#xff0c;包括Windows和Mac。无论用户使用的是哪种操作系统&#xff0c;都可以使用该软件进行数据恢复。 其次&#xff0c;EasyRecovery支持从各种存储设备和媒介中恢复数据&#…

iOS消息转发流程

当向Objc对象发送消息时&#xff0c;如果找到对象对应的方法&#xff0c;就会进入消息转发流程&#xff0c;给开发者提供一些最后的机会处理消息无法发送问题&#xff0c;以免出现程序崩溃。 1. 回调对象的resolveInstanceMethod方法&#xff0c;在这个方法中&#xff0c;允许开…

【图论】【并集查找】【C++算法】928. 尽量减少恶意软件的传播 II

作者推荐 动态规划的时间复杂度优化 涉及知识点 图论 并集查找 LeetCode928. 尽量减少恶意软件的传播 II 给定一个由 n 个节点组成的网络&#xff0c;用 n x n 个邻接矩阵 graph 表示。在节点网络中&#xff0c;只有当 graph[i][j] 1 时&#xff0c;节点 i 能够直接连接到…

JVM内存回收算法

1.1 引用计数法 每个对象创建的时候&#xff0c;会分配一个引用计数器&#xff0c;当这个对象被引用的时候计数器就加1&#xff0c;当不被引用或者引用失效的时候计数器就会减1。任何时候&#xff0c;对象的引用计数器值为0就说明这个对象不被使用了&#xff0c;就认为是“垃圾…

YOLO算法

YOLO介绍 YOLO&#xff0c;全称为You Only Look Once: Unified, Real-Time Object Detection&#xff0c;是一种实时目标检测算法。目标检测是计算机视觉领域的一个重要任务&#xff0c;它不仅需要识别图像中的物体类别&#xff0c;还需要确定它们的位置。与分类任务只关注对…

第七十一天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第71天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点&#xff1a; 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

抽象类、模板方法模式

抽象类概述 在Java中abstract是抽象的意思&#xff0c;如果一个类中的某个方法的具体实现不能确定&#xff0c;就可以申明成abstract修饰的抽象方法&#xff08;不能写方法体了&#xff09;&#xff0c;这个类必须用abstract修饰&#xff0c;被称为抽象类。 抽象方法定义&…

驱动高级--mknod

一、起源 仅devfs&#xff0c;导致开发不方便以及一些功能难以支持&#xff1a; 热插拔 不支持一些针对所有设备的统一操作&#xff08;如电源管理&#xff09; 不能自动mknod 用户查看不了设备信息 设备信息硬编码&#xff0c;导致驱动代码通用性差&#xff0c;即没有分离…