shell脚本的条件测试

命令结果判定

&& :在命令执行后如果没有任何报错时会执行符号后面的动作

|| :在命令执行后如果命令有报错会执行符号后的动作

条件判断

test 语句

\[\],\[],(()) 语句

\[] 可以支持的表达式更多,是最常用的语句

判断表达式

文件判断

-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新为真

f1 -ot f2 -ot为older than ##文件f1比f2旧为真

f1 -ef f2 -ef为等于 ##文件是否在相同的设备有相同的节点号

# cd /mnt/

-a 判断文件是否存在

-d 判断文件类型

-S 判断文件是否存在,且不为空

-x 判断文件权限,是否可以执行

-ot 判断文件新旧

# "lee" -ot "lee1" && echo yes || echo no

-ef 判断节点号是否相同

节点号不同运行结果:

# rm -fr test

# ln lee test 【创建硬链接】

# ls -i lee test 查看节点号

# "/mnt/lee" -ef "/mnt/test" && echo yes || echo no


字符串测试表达式

检测变量是否为空

# a=lee

比较字符

# b=test

整数测试表达式

判断相等

# a=1 ; b=1


对比大小

逻辑操作符

练习:判断输入字符,输入空报错,输入exit退出,判断是否为文件或目录

# vim file.sh 【配置文件】

#!/bin/bash

ACTIO()

{

read -p "输入字符: " target

#退出

"$target" = "exit" && {

echo bye

exit 0

}

1. 检测变量是否为空

-z "$target" && {

echo "错误:变量不能为空"

target

}

2. 检测文件/目录是否存在

-e "$target" || {

echo "错误,目录不存在"

target

}

3. 判定是否是文件

-f "$target" && {

echo "是个文件"

target

}

4. 判定是否是目录

-d "$target" && {

echo "是一个目录"

target

}

}

ACTIO 【最后要运行函数】

# bash file.sh 【sh不能运行时,bash可以运行脚本】

练习:猜数字判定

#!/bin/bash

NUM()

{ NUM=$RANDOM%10 } 【设置随机数0~9】

GAUSE()

{

read -p "输入数字0~9:" sum

1,检测变量是否为空

-z "$sum" && { 【判断输入是否为空】

echo "错误:输入不能为空"

GAUSE

}

#2,检测输入

(( sum \> 10 \|\| sum < 0 )) && { 【判断输入是否在范围内】

echo "必须是0~9:"

echo $NUM

GAUSE

}

#3,循环运行

"$sum" -eq "$NUM" && { 【判断是否猜对,没猜对会退出】

echo "猜对了"

read -p "是否继续:(y/n)" AAA

"$AAA" = "y" && {

NUM

GAUSE

}||{

echo bye

exit

}

}

}

NUM

GAUSE

相关推荐
唐山泽际科技3 分钟前
2026年本地生活服务(如餐饮、美业)怎样借助LBS(地理位置)精准获客?
python·智能手机·生活
金銀銅鐵14 分钟前
[Python] 用 Pillow 来绘制北欧五国的国旗
python
皓月斯语15 分钟前
B3865 [GESP202309 二级] 小杨的 X 字矩阵 题解
开发语言·c++·矩阵·题解
paeamecium2 小时前
【PAT甲级真题】- Rational Sum (20)
数据结构·c++·python·算法·pat考试·pat
Highcharts.js8 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
爱昏羔8 小时前
下篇:从检索到交互 — 物流RAG问答系统与WebUI全实现
python·langchain·agent
_Jimmy_9 小时前
Agent引用数据库知识过时的增量同步方案
人工智能·python·langchain
头发还在的女程序员10 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
min(a,b)10 小时前
学习第 4 天:面向对象与异常处理
python·学习·学习方法
爱写代码的小朋友12 小时前
从零开始学 Win32 API:C++ 窗口编程实战(VS Code + MinGW-w64 命令行详解)
开发语言·c++