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

RHCE的学习(21)

第三章 Shell条件测试

用途

  • 为了能够正确处理Shell程序运行过程中遇到的各种情况,Linux Shell提供了一组测试运算符。

  • 通过这些运算符,Shell程序能够判断某种或者几个条件是否成立。

  • 条件测试在各种流程控制语句,例如判断语句和循环语句中发挥了重要的作用,所以了解和掌握这些条件测试是非常重要的

基本语法

格式:

格式1: test  -参数  条件表达式test   数值比较   -eq       test a -eq b       test   字符比较    a = b   test a == b [ ] 算数比较 -eq  =  ==但> <运算符有问题需要通过\转义符  -a -o !    [ ] 字符比较test支持= ==; 不支持-eq  测试符和测试值之间通过空格分割[[ ]] && ||   算数比较不需要转义符    [[ ]] 可以支持正则   =~格式2: [  条件表达式  ]     # 注意:[]的左右要有空格   
格式3: [[  条件表达式  ]]   # 注意:[]的左右要有空格
格式4: ((条件表达式))

重点数值比较符通过字符类的测试测试

test[ ][[ ]] ---支持正则符
数值比较test 1-eq 2 (-eq -gt -lt -ge -le -ne)-eq -gt -lt -ge -le -ne -a -o !-eq -gt -lt -ge -le -ne && || ! --测试符都支持
字符比较test a = b 或者 test a == b -a -o != == -a -o != == && || ! a =~ ".*" a == a
  • test单独使用,判断条件为真,echo $?返回0,假返回1

  • test与[ ]等价

  • [[ ]] 是扩展命令,可以使用通配符等进行模式匹配,&& || > < 等操作符可以直接应用于双中括号中,但不能用于单中括号中

  • (()) 一般用于if语句里,两端不需要有空格,测试对象为整数

# test语法
[root@server ~]# test -f  /etc/passwd
[root@server ~]# echo  $?
0
[root@server ~]# test -f  /etc/aa
[root@server ~]# echo  $?
1
[root@server ~]# 
[root@server ~]# test  -f  /etc/passwd  &&  echo  1 || echo  0
1
[root@server ~]# test  -f  /etc/aa  &&  echo  1 || echo  0
0
[root@server ~]# test  -f  /etc/passwd  &&  echo  yes || echo  no
yes
[root@server ~]# test  -f  /etc/aa  &&  echo  yes || echo  no
no
[root@server ~]# if  test -f /etc/passwd ; then  echo  1 ; else echo no ;fi
1
[root@server ~]# if  test -f /etc/aa ; then  echo  1 ; else echo no ;fi
no
# [] 语法
[root@server ~]# [-f  /etc/passwd]    # 注意:[] 中要有空格
bash: [-f: command not found...
​
[root@server ~]# [  -f  /etc/passwd ]
[root@server ~]# echo  $?
0
[root@server ~]# [  -f  /etc/aa ]
[root@server ~]# echo  $?
1
[root@server ~]# [  -f  /etc/aa ] &&  echo  y  ||  echo  n
n
[root@server ~]# [  -f  /etc/passwd ] &&  echo  y  ||  echo  n
y
[root@server ~]# if  [ -f /etc/passwd ] ; then  echo  1 ; else echo no ;fi
1
[root@server ~]# if  [ -f /etc/aa ] ; then  echo  1 ; else echo no ;fi
no
# [[]]  语法
[root@server ~]# [[ 3 > 2 || 1 > 2 ]]  &&  echo  1 || echo 0
1
[root@server ~]# [[ 3 > 2 && 1 > 2 ]]  &&  echo  1 || echo 0
0
(()) 语法
[root@server ~]# ((9>5))  &&  echo 1  || echo 0
1
[root@server ~]# (( 9 > 5 ))  &&  echo 1  || echo 0
1
[root@server ~]# ((9>5))  &&  echo 1  || echo 0
1
[root@server ~]# ((9>13))  &&  echo 1  || echo 0
0
​
[root@server ~]# ((9>13.5))  &&  echo 1  || echo 0  # 注意:不支持小数运算
-bash: ((: 9>13.5:语法错误: 无效的算术运算符 (错误符号是 ".5")
0

文件测试

参数:

参数作用
-b 文件名检测文件是否是块设备文件,是返回 true
-c 文件名是否是字符设备文件
-d 文件名是否是目录
-f 文件名是否是普通文件(既不是目录,也不是设备文件)
-S 文件名是否为socket文件
-P 文件名是否为管道符文件
-L 文件名是否为链接文件
-u 文件名是否有suid的权限
-s 文件名是否为空(文件大小是否大于0),不为空返回 true
-e 文件名检测文件(包括目录)是否存在,如果是,则返回 true
-r 文件名检测文件是否可读,如果是,则返回 true。
-w 文件名检测文件是否可写,如果是,则返回 true
-x 文件名检测文件是否可执行,如果是,则返回 true
f1 -nt f2文件f1比文件f2新则为真(根据文件修改时间计算)
f1 -ot f2文件f1比文件f2旧则为真(根据文件修改时间计算)

//普通文件测试
[root@localhost ~]# touch file1.txt
[root@localhost ~]# [ -f file1.txt ] && echo yes || echo no
yes
//目录测试
[root@localhost ~]# [ -d /tmp ] && echo yes || echo no
yes
//测试文件属性
[root@localhost ~]# ll file1.txt 
-rw-r--r-- 1 root root 0 8月  28 12:30 file1.txt
[root@localhost ~]# [ -r file1.txt ] && echo yes || echo no
yes
[root@localhost ~]# [ -x file1.txt ] && echo yes || echo no
no
[ -e ]
[ -s ]
[root@server ~]# [ -d /root ] && echo  y || echo n
y
[root@server ~]# [ -d /aa ] && echo  y || echo n
n
[root@server ~]# [ -b /dev/nvme0n1 ] && echo  y || echo n
y
[root@server ~]# [ -L /dev/cdrom ] && echo  y || echo n
y
[root@server ~]# ll  /dev/cdrom 
lrwxrwxrwx 1 root root 3  3月 22 11:31 /dev/cdrom -> sr0
[root@server ~]# [ -e /file1 ] && echo  y || echo n
n
[root@server ~]# touch  /file1
[root@server ~]# [ -e /file1 ] && echo  y || echo n
y
# 编写脚本,测试文件是否存在,不存在则创建
[root@server ~]# vim  temp1.sh
#!/bin/bash
​
FILE=$1
echo  FILE
​
if test -e $FILE
thenecho  "$FILE文件已存在"
else    echo  "$FILE文件不存在,开始新建..."touch  $FILEls  -l $FILE
fi 
​
[root@server ~]# bash temp1.sh  /etc/passwd
/etc/passwd
/etc/passwd文件已存在
[root@server ~]# bash temp1.sh  temp
temp
temp文件不存在,开始新建...
-rw-r--r-- 1 root root 0  6月 17 14:53 temp
# 上例改写
[root@server ~]# vim  temp1.sh
#!/bin/bash
​
read -p "请输入文件名: "  FILE
​
if test -e $FILE
thenecho  "$FILE文件已存在"
elseecho  "$FILE文件不存在,开始新建..."touch  $FILEls  -l $FILE
fi
​
[root@server ~]# bash temp1.sh
请输入文件名: /etc/sos/sos.conf
/etc/sos/sos.conf文件已存在
[root@server ~]# bash temp1.sh
请输入文件名: t1
t1文件不存在,开始新建...
-rw-r--r-- 1 root root 0  6月 17 14:56 t1

字符串运算符

示例:

//-n如果字符串长度不为零输出yes,否则输出no
[root@localhost ~]# [ -n "hello" ] && echo yes || echo no
yes
[root@localhost ~]# [ -n "" ] && echo yes || echo no
no
注意://变量为空时通过[[]]进行测试,[]测试有问题
[root@localhost ~]# str=`grep xixi /etc/passwd`  
[root@localhost ~]# [[ -n $str ]] && echo 有 || echo 无
无
[root@localhost ~]# [ -n $str ] && echo 有 || echo 无
有//-z如果字符串长度为零输出yes,否则输出no
[root@localhost ~]# [ -z "hello" ] && echo yes || echo no
no
[root@localhost ~]# [ -z "" ] && echo yes || echo n
yes
// 字符串相等比较
注意:=的左右有空格,没有空格将会导致逻辑错误。
[root@localhost ~]# [ "HELLO" = "hello" ] && echo yes || echo no
no
[root@localhost ~]# [ "HELO" != "hello" ] && echo yes || echo no
yesif [ -z $a ]
thenecho "-z $a : 字符串长度为 0"
elseecho "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
thenecho "-n $a : 字符串长度不为 0"
elseecho "-n $a : 字符串长度为 0"
fi
if [ $a ]     -------$判断z字符串是否为空,不空为真,空为假
thenecho "$a : 字符串不为空"
elseecho "$a : 字符串为空"
fi

整数测试(关系运算符 )

作用

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

操作符

数值测试:
[root@172 ~]# [ 1 -eq 2 ] &&  echo yes || echo no
no
[root@172 ~]# test 1 -eq 2 && echo yes || echo no
no
[root@172 ~]# [[ 1 = 2 ]] && echo yes || echo no
no
[root@172 ~]# [[ 1 -eq  2 ]] && echo yes || echo no
no
[root@172 ~]# ((1>=2)) && echo yes || echo no
no字符串比较
[root@172 ~]# [[ "a" == "b" ]]
[root@172 ~]# echo $?
1

示例:

[root@localhost ~]# [ 5 -gt 3 ] && echo yes || echo no
yes
[root@localhost ~]# [ `id -u` -eq 0 ] && echo admin || echo other
admin
[root@localhost ~]# su - student
[student@localhost ~]$ [ `id -u` -eq 0 ] && echo admin || echo other
other

[root@server ~]# [ 5 -gt 3 ] && echo y || echo n  
y
[root@server ~]# test  5 -gt 3  && echo y || echo n  
y
[root@server ~]# ((5>3))  && echo y || echo  0
y
# 知识拓展
# 检查左侧内容是否包含右侧的表达式,可以使用 =~ 正则匹配,表示是否包含
[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

逻辑操作符/布尔运算符

符号

例:

[root@server ~]# [ -f /etc/passwd  -a -f /etc/services ] && echo  1 || echo 0
1
[root@server ~]# [ -f /etc/hosts  -o  -d /etc/services ] && echo  1 || echo 0
1
[root@server ~]# ((5<10 && 5>2))  && echo y || echo n
y
[root@server ~]# ((2<5<10))  && echo y || echo n
y
[root@server ~]# ((2<5<1))  && echo y || echo n
n
[root@server ~]# ((6<5<10))  && echo y || echo n
y
[root@server ~]# ((2<5<-1))  && echo y || echo n
n
  • 命令分隔符

cmd1;cmd2     以独立的进程依次执行cmd1和cmd2
(cmd1;cmd2)   在同一进程中依次执行cmd1和cmd2
cmd1&cmd2     cmd1和cmd2同时执行,分属于不同的进程
cmd1&&cmd2    当cmd1为真时,则执行cmd2
cmd1||cmd2    当cmd1不为真时,则执行cmd2
cmd&          后台执行
# 若账户fox10不存在,则添加账户
[root@server ~]# id fox10  &>  /dev/null  &&  echo  "fox10已存在"  ||  useradd  fox10# &>  /dev/null 表示将左侧命令执行的正确和错误输出到“黑洞”即不显示到屏幕

命令执行顺序

复合指令:即一串命令

()和{}都是对一串的命令进行执行,但有所区别:

相同点:

  • ()和{}都是把一串的命令放在括号里面,如果命令在一行命令之间用;号隔开
  • ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令

不同点 :

  • ()只是对一串命令重新开一个子shell进行执行, {}对一串命令在当前shell执行
  • ()最后一个命令可以不用分号,{}最后一个命令要用分号
  • ()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格

示例:

[root@localhost scripts]# (pwd;cd /tmp;pwd)
/scripts
/tmp
# ()子shell中执行,执行完毕,当前路径不变
[root@localhost tmp]# { pwd;cd /tmp;pwd; } > aaa
/tmp
/tmp
[root@localhost tmp]# pwd;cd /;pwd

示例:

// 如果目录/abc存在给出提示信息目录已存在,否则创建目录
​[ -e /abc -a -d /abc ]
方法1:[root@localhost ~]# [ -d /abc ] && echo exists || mkdir /abc
方法2:[root@localhost ~]# [ ! -d /abc ] && mkdir /abc || echo exists

案例分析

  • 例1:判断当前已登录账户数,若超过5个则输出“Too many”

分析:1)如何查看当前登录用户--> who
           2)已登录的用户数--> who | wc -l
     num=$(who  | wc -l)
    [ $num -gt 5 ] && echo "Too many"

[root@server ~]# num=$(who | cut -d " " -f1 | sort -u | wc -l)[root@server ~]# [ $num -gt 5 ] && echo "Too many" || echo "已登录账户数:$num"
已登录账户数:1# who : 查看当前已登录的账户信息# cut -d " " -f1 :以空格为列向分割符,截取第1部分# sort -u :去重后排序# wc  -l:计算行数# 上例改写为:
[root@server ~]# (($num>5))  && echo "Too many" || echo "已登录账户数:$num"
  • 例2:编写脚本temp2.sh ,程序从键盘读入一个目录名,判断该命令是否存在,若不存在则创建,并显示目录信息

[root@server ~]# vim  temp2.sh
#!/bin/bashcd  /
ls
read -p "请输入一个目录名:"  dir
test  -d  $dir  &&  ls  -l  $dir  || (echo "目录不存在,开始新建..." ; mkdir  $dir ; ls -l $dir)
  • 例3:如果/var/log/messages文件行数大于30行,则显示提示信息

[root@server ~]# (($(cat  /var/log/messages | wc -l)>30)) && echo  "好大一个文件" || echo  "还能接受"
  • 例4:编写脚本temp3.sh,功能:显示root目录下的文件信息,之后建立一个aa目录,在aa目录下新建一个文件bb.txt,并修改该文件的权限为可执行,最后再次浏览信息

[root@server ~]# vim  temp3.sh
#!/bin/bashls -l /rootmkdir  /root/aatouch  /root/aa/bb.txtchmod  +x  /root/aa/bb.txtls -l /root
  • 例5:编写脚本temp4.sh,从键盘读入x,y,计算和值后输出

[root@server ~]# vim  temp4.sh
#!/bin/bashread -p "请输入x的值:" xread -p "请输入y的值:" yif  [ -n "$x" -a  -n  "$y" ]  # -n判断非空
thenif  [[ "$x" =~ ^[0-9]+$ ]]  &&  [[ "$y" =~ ^[0-9]+$ ]] # 判断是数字thenecho  $[x+y]elseecho  "请输入数字"fi
elseecho "请输入有效内容"
fi
  • 例6:编写temp5.sh脚本显示所有用户,选择一个用户输入,判断是root账户还是系统账户还是普通账户

[root@server ~]# vim  temp5.sh
#!/bin/bashcat /etc/passwd | cut -d ":" -f1 | sort -uread -p "请输入一个账户名:"  usus_num=$(id -u $us)if  (($us_num==0))
thenecho  "此用户为管理员账户"
elseif (($us_num>=1 && $us_num<=999))thenecho  "此账户为系统账户"elseecho  "普通账户"fi
fi
  • 例7:编写脚本temp6.sh ,给定文件/etc/sos/sos.conf,判断是否存在空白行,若存在则显示行数,否则显示“无空白行”提示信息

[root@server ~]# vim  temp6.sh
#!/bin/bashnum=$(grep  ^$  /etc/sos/sos.conf | wc -l)if  (($num>0))
thenecho  "/etc/sos/sos.conf文件含有空白行,行数:$num,位置如下:"grep  -n  ^$  /etc/sos/sos.conf
elseecho  "/etc/sos/sos.conf此文件无空白行"
fi

总结:

  1. 文件测试
  2. 算数运算符
  3. 字符串运算符 -n
  4. 关系型运算符
  5. 逻辑运算符

相关文章:

RHCE的学习(21)

第三章 Shell条件测试 用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&#xff0c;Linux Shell提供了一组测试运算符。 通过这些运算符&#xff0c;Shell程序能够判断某种或者几个条件是否成立。 条件测试在各种流程控制语句&#xff0c;例如判断语句和循环语句中…...

Ubuntu 18.04 配置sources.list源文件(无法安全地用该源进行更新,所以默认禁用该源)

如果你 sudo apt update 时出现诸如 无法安全地用该源进行更新&#xff0c;所以默认禁用该源 的错误&#xff0c;那就换换源吧&#xff0c;链接&#xff1a; https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/ 注意版本&#xff1a; 修改源文件&#xff1a; sudo nano /etc…...

19.UE5道具掉落

2-21 道具掉落&#xff0c;回血、回蓝、升级提升伤害_哔哩哔哩_bilibili 目录 1.道具的创建&#xff0c;道具功能的实现 2.随机掉落 1.道具的创建&#xff0c;道具功能的实现 新建Actor蓝图&#xff0c;并命名为道具总类&#xff0c;添加一个Niagara粒子组件和一个碰撞箱bo…...

MySQL —— MySQL逻辑架构与查询过程

文章目录 MySQL逻辑架构整体分为三层连接层服务层查询缓存解析器优化器执行器 存储引擎层系统文件层 MySQL 查询过程查询过程框图 博客1 博客2 MySQL逻辑架构整体分为三层 最上层为客户端层&#xff0c;并非MySQL所独有&#xff0c;诸如&#xff1a;连接管理、授权认证、权限校…...

ODOO学习笔记(12):自定义模块开发

一、Odoo模块结构基础 基本目录结构 Odoo自定义模块通常有一个特定的目录结构。一个典型的模块目录包含以下文件和文件夹&#xff1a; __init__.py&#xff1a;这是一个Python模块初始化文件。它使得该目录被视为一个Python模块。在这个文件中&#xff0c;你可以通过from. impo…...

Excel单元格中自适应填充多图

实例需求&#xff1a;在Excel插入图片时&#xff0c;由于图片尺寸各不相同&#xff0c;如果希望多个图片填充指定单元格&#xff0c;依靠用户手工调整&#xff0c;不仅费时费力&#xff0c;而且很难实现完全填充。如下图中的产品图册&#xff0c;有三个图片&#xff0c;如下图所…...

20.useMediaQuery

React useMediaQuery 钩子:如何优雅地实现响应式设计? 在现代 Web 开发中,响应式设计是一个关键概念,它允许应用根据不同的屏幕尺寸和设备特性调整其布局和行为。useMediaQuery 钩子提供了一种声明式的方法来在 React 组件中使用媒体查询,使得响应式逻辑的实现变得简单而…...

无人机场景 - 目标检测数据集 - 车辆检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;无人机场景车辆检测数据集&#xff0c;真实场景高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如无人机场景城市道路行驶车辆图片、无人机场景城市道边停车车辆图片、无人机场景停车场车辆图片、无人机场景小区车辆图片、无人机场景车辆遮挡、车…...

聚合查询(查询)

count:统计表中所有的行数 指定某一列不统计NULL sum:求和 NULL值不参与计算&#xff08;省略&#xff09; avg()&#xff1a;对所有行的指定列求平均值 max&#xff08;&#xff09; min()&#xff1a;求所有指定行中最大值与最小值 分组查询 group by: ROUDN()小数点 havin…...

QT QLineEdit失去焦点事件问题与解决

本文介绍如何获得QLineEdit的失去焦点事件和获得焦点的输入框也会触发失去焦点事件的问题&#xff01; 目录 一、QLineEdit获得失去焦点事件 1.自定义类继承自QLineEdit 2.重写 focusOutEvent 3.使用 二、失去焦点事件问题 1.问题描述 2.问题解决 三、源码分享 lineed…...

Remora

Remora Remora 模型能够独立于碱基识别过程预测甲基化/修饰碱基的状态。Remora 仓库专注于准备修饰碱基训练数据和训练修饰碱基模型。此外,还提供了一些用于运行 Remora 模型和调查原始信号的功能。对于生产环境中的修饰碱基识别,建议使用 Dorado <https://github.com/na…...

MySQL中将一个字符串字段按层级树状展开

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 文章目录 需求1.分析2.实现3.思路刨析表结构和数据 需求 数据库中有个字段如下 如何将其转换为如下形式&#xff1a; 1.分析 1.他的层级个数是不确定的&#xff0c;也就是说有的有2层有的有5…...

vue面试题8|[2024-11-14]

问题1&#xff1a;什么是渐进式框架? vue.js router vuex element ...插件 vue.js 渐0 router 渐1 vuex 渐2 vue.js只是一个核心库&#xff0c;比如我再添加一个router或者vuex&#xff0c;不断让项目壮大&#xff0c;就是渐进式框…...

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…...

基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型

本系统是基于Python Django框架构建的“Boss直聘”数据采集与分析预测系统&#xff0c;旨在通过技能匹配的方式对招聘信息进行分析与预测&#xff0c;帮助求职者根据自身技能找到最合适的职位&#xff0c;同时为招聘方提供更精准的候选人推荐。系统的核心预测模型基于职位需求技…...

MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk)

MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk) 1.计算模型介绍 使用GARCH&#xff08;广义自回归条件异方差&#xff09;模型计算VaR&#xff08;风险价值&#xff09;时&#xff0c;方差法是一个常用的方法。GARCH模型能够捕捉到金融时间序列数据中的波…...

深入Linux基础:文件系统与进程管理详解

在Linux运维领域&#xff0c;文件系统和进程管理是两个至关重要的基础知识。理解它们的原理和实际操作&#xff0c;不仅有助于我们更高效地管理服务器&#xff0c;还能快速定位问题、优化性能。本文将带你全面了解这两大模块&#xff0c;并配以示例代码进行讲解&#xff0c;帮助…...

缓存及其不一致

在实际开发过程中&#xff0c;一般都会遇到缓存&#xff0c;像本地缓存&#xff08;直接在程序里搞个map也可以&#xff0c;但是可能会随着数据的增长出现OOM&#xff0c;建议使用正经的本地缓存框架&#xff0c;因为自己实现淘汰策略啥的挺费劲的&#xff09;、分布式缓存&…...

Leetcode 有效的数独

这段代码解决的是 验证一个数独是否有效 的问题&#xff0c;其算法思想是基于 规则校验和状态记录。具体思想如下&#xff1a; 算法思想 核心目标&#xff1a; 检查每个数字在 同一行、同一列 和 同一个 3x3 子格 中是否重复。 状态记录&#xff1a; 使用 3 个布尔二维数组分别…...

《Java核心技术 卷I》用户界面中首选项API

首选项API 在桌面程序中&#xff0c;通常都会存储用户首选项&#xff0c;如用户最后处理的文件、窗口的最后位置等。 利用Properties类可以很容易的加载和保存程序的配置信息&#xff0c;但有以下缺点&#xff1a; 有些操作系统没有主目录概念&#xff0c;很难为匹配文件找到…...

Android 中的 Zygote 和 Copy-on-Write 机制详解

在 Android 系统中&#xff0c;Zygote 是一个关键的进程&#xff0c;几乎所有的应用进程都是通过它 fork&#xff08;派生&#xff09;出来的。通过 Zygote 启动新进程的方式带来了显著的性能优势&#xff0c;这得益于 fork 操作和 Linux 中的 Copy-on-Write&#xff08;COW&am…...

【人工智能】从零开始用Python实现逻辑回归模型:深入理解逻辑回归的原理与应用

解锁Python编程的无限可能&#xff1a;《奇妙的Python》带你漫游代码世界 《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门&#xff01; 逻辑回归是一种经典的统计学习方法&#xff0c;用于分类问题尤其是二分类问题。它通过学习数据的特征和目标标签之间的…...

推荐一款功能强大的光学识别OCR软件:Readiris Dyslexic

Readiris Dyslexic是一款功能强大的光学识别OCR软件&#xff0c;可以扫描任何纸质文档并将其转换为完全可编辑的数字文件(Word&#xff0c;Excel&#xff0c;PDF)&#xff0c;然后用你喜欢的编辑器进行编辑。该软件提供了一种轻松创建&#xff0c;修改和签名PDF的完整解决方法&…...

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…...

css-50 Projects in 50 Days(3)

html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>旋转页面</title><link rel"sty…...

另外一种缓冲式图片组件的用法

文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理3. 示例代码4. 内容总结我们在上一章回中介绍了"FadeInImage组件"相关的内容,本章回中将介绍CachedNetworkImage组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的CachedNetwo…...

字节青训-小C的外卖超时判断、小C的排列询问

目录 一、小C的外卖超时判断 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、小C的排列询问 问题描述 测试样例 最终代码&#xff1a; 运行结果&#xff1a; ​编辑 一、小C的外卖超时判断…...

PHP 伪静态详解及实现方法

概述 在现代 Web 开发中&#xff0c;URL 的设计对用户体验和搜索引擎优化&#xff08;SEO&#xff09;至关重要。动态 URL 虽然功能强大&#xff0c;但往往显得冗长且不友好。伪静态&#xff08;URL 重写&#xff09;技术通过将动态 URL 转换为静态样式&#xff0c;不仅提高了…...

Spring Boot 简单预览PDF例子

目录 前言 一、引入依赖 二、使用步骤 1.创建 Controller 处理 PDF 生成和预览 2.创建预览页面 总结 前言 使用 Spring Boot 创建一个生成 PDF 并进行预览的项目&#xff0c;你可以按以下步骤进行。我们将使用 Spring Boot、Thymeleaf、iText 等技术来完成这个任务。 一、引入…...

【魔珐有言-注册/登录安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…...