条件测试 、 if选择结构 、 循环结构案例
Top
NSD SHELL DAY02
- 案例1:条件测试操作
- 案例2:使用if选择结构
- 案例3:使用for循环结构
- 案例4:使用while循环结构
1 案例1:条件测试操作
1.1 问题
本案例要求参考PPT上的示例,分别练习以下条件测试操作:
- 字符串匹配
- 比较整数值的大小
- 识别文件/目录的状态
- 多个条件/操作的逻辑组合
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:条件测试的基本用法
1)语法格式
使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 $?),所以可以在测试后查看变量$?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作) 。
步骤二:字符串测试
1)== 比较两个字符串是否相同
检查当前用户是否为root。
当root用户执行时:
- [root@svr5 ~]# [ $USER == "root" ] //测试
- [root@svr5 ~]# echo $? //查看结果0为对,非0为错
当普通用户执行时:
- [zengye@svr5 ~]$ [ $USER == "root" ]
- [zengye@svr5 ~]$ echo $? //查看结果0为对,非0为错
2)!= 比较两个字符串是否不相同
当普通用户执行时:
- [zengye@svr5 ~]$ [ $USER != "root" ]
当root用户执行时:
- [root@svr5 ~]# [ $USER != "root" ]
3)一行执行多条命令的情况
- # A && B //仅当A命令执行成功,才执行B命令
- # A || B //仅当A命令执行失败,才执行B命令
- # A ; B //执行A命令后执行B命令,两者没有逻辑关系
- # A && B || C //思考?
4) -z 检查变量的值是否未设置(空值)
- [root@svr5 ~]# var1="nb" ; var2=""
- [root@svr5 ~]# [ -z "$var1" ] && echo "空值" || echo "非空值"
- 非空值
- [root@svr5 ~]# [ -z $var2 ] && echo "空值" || echo "非空值"
- 空值 //变量var2已设置,但无任何值,视为空
- [root@svr5 ~]# [ ! -z $var1 ] //测试var1是否为非空
还有一个-n可以测试变量是否不为空(相当于! -z)。
步骤三:整数值比较
参与比较的必须是整数(可以调用变量),比较非整数值时会出错:
- [root@svr5 ~]# A=20.4
- [root@svr5 ~]# [ $A -gt 10 ] //不支持小数比较
- -bash: [: 20.4: integer expression expected
1)-eq 比较两个数是否相等。
- [root@svr5 ~]# X=20 //定义一个测试变量
- [root@svr5 ~]# [ $X -eq 20 ] && echo "相等" || echo "不相等"
- 相等
- [root@svr5 ~]# [ $X -eq 30 ] && echo "相等" || echo "不相等"
- 不相等
2)-ne 比较两个数是否不相等。
- [root@svr5 ~]# X=20 //定义一个测试变量
- [root@svr5 ~]# [ $X -ne 20 ] && echo "不等于" || echo "等于"
- 等于
- [root@svr5 ~]# [ $X -ne 30 ] && echo "不等于" || echo "等于"
- 不等于
3)-gt 比较前面的整数是否大于后面的整数。
- [root@svr5 ~]# X=20 //定义一个测试变量
- [root@svr5 ~]# [ $X -gt 10 ] && echo "大于" || echo "否"
- 大于
- [root@svr5 ~]# [ $X -gt 20 ] && echo "大于" || echo "否"
- 否
- [root@svr5 ~]# [ $X -gt 30 ] && echo "大于" || echo "否"
- 否
4)-ge 比较前面的整数是否大于或等于后面的整数。
- [root@svr5 ~]# X=20 //定义一个测试变量
- [root@svr5 ~]# [ $X -ge 10 ] && echo "大于或等于" || echo "否"
- 大于或等于
- [root@svr5 ~]# [ $X -ge 20 ] && echo "大于或等于" || echo "否"
- 大于或等于
- [root@svr5 ~]# [ $X -ge 30 ] && echo "大于或等于" || echo "否"
- 否
5)-lt 比较前面的整数是否小于后面的整数。
- [root@svr5 ~]# X=20 //定义一个测试变量
- [root@svr5 ~]# [ $X -lt 10 ] && echo "小于" || echo "否"
- 否
- [root@svr5 ~]# [ $X -lt 20 ] && echo "小于" || echo "否"
- 否
- [root@svr5 ~]# [ $X -lt 30 ] && echo "小于" || echo "否"
- 小于
6)-le 比较前面的整数是否小于或等于后面的整数。
- [root@svr5 ~]# X=20 //定义一个测试变量
- [root@svr5 ~]# [ $X -le 10 ] && echo "小于或等于" || echo "否"
- 否
- [root@svr5 ~]# [ $X -le 20 ] && echo "小于或等于" || echo "否"
- 小于或等于
- [root@svr5 ~]# [ $X -le 30 ] && echo "小于或等于" || echo "否"
- 小于或等于
7)提取当前登录的用户数,比较是否大于等于3。
- [root@svr5 ~]# who | wc -l //确认已登录的用户数
- 2
- [root@svr5 ~]# N=$(who | wc -l) //赋值给变量N
- [root@svr5 ~]# [ $N -ge 3 ] && echo "超过了" || echo "没超过"
- 没超过
上述赋值给变量N及与3比较的操作,可以简化为如下形式:
- [root@svr5 ~]# [ $(who | wc -l) -ge 3 ] && echo "超过了" || echo "没超过"
- 没超过
步骤四:识别文件/目录的状态
1)-e 判断对象是否存在(不管是目录还是文件)
- [root@svr5 ~]# [ -e "/usr/" ] && echo "存在" || echo "不存在"
- 存在
- [root@svr5 ~]# [ -e "/etc/fstab" ] && echo "存在" || echo "不存在"
- 存在
- [root@svr5 ~]# [ -e "/home/nooby" ] && echo "存在" || echo "不存在"
- 不存在
2)-d 判断对象是否为目录(存在且是目录)
- [root@svr5 ~]# [ -d "/usr/" ] && echo "是目录" || echo "不是目录"
- 是目录
- [root@svr5 ~]# [ -d "/etc/fstab" ] && echo "是目录" || echo "不是目录"
- 不是目录
- [root@svr5 ~]# [ -d "/home/nooby" ] && echo "是目录" || echo "不是目录"
- 不是目录
3)-f 判断对象是否为文件(存在且是文件)
- [root@svr5 ~]# [ -f "/usr/" ] && echo "是文件" || echo "不是文件"
- 不是文件
- [root@svr5 ~]# [ -f "/etc/fstab" ] && echo "是文件" || echo "不是文件"
- 是文件
- [root@svr5 ~]# [ -f "/home/nooby" ] && echo "是文件" || echo "不是文件"
- 不是文件
4)-r 判断对象是否可读
此测试对root用户无效,无论文件是否设置r权限,root都可读:
- [root@svr5 ~]# cp /etc/hosts /tmp/test.txt //复制一个文件做测试
- [root@svr5 ~]# chmod -r /tmp/test.txt //去掉所有的r权限
- [root@svr5 ~]# [ -r "/tmp/test.txt" ] && echo "可读" || echo "不可读"
- 可读 //root测试结果仍然可读
切换为普通用户,再执行相同的测试,结果变为“不可读”:
- [zengye@svr5 ~]$ [ -r "/tmp/test.txt" ] && echo "可读" || echo "不可读"
- 不可读
5)-w 判断对象是否可写
此测试同样对root用户无效,无论文件是否设置w权限,root都可写:
- [root@svr5 ~]# chmod -w /tmp/test.txt //去掉所有的w权限
- [root@svr5 ~]# ls -l /tmp/test.txt //确认设置结果
- ---------- 1 root root 33139 12-11 10:43 /tmp/test.txt
- [root@svr5 ~]# [ -w "/tmp/test.txt" ] && echo "可写" || echo "不可写"
- 可写
切换为普通用户,可以正常使用-w测试:
- [zengye@svr5 ~]$ ls -l /tmp/test.txt
- ---------- 1 root root 33139 12-11 10:52 /tmp/test.txt
- [zengye@svr5 ~]$ [ -w "/tmp/test.txt" ] && echo "可写" || echo "不可写"
- 不可写
6)-x 判断对象是否具有可执行权限
这个取决于文件本身、文件系统级的控制,root或普通用户都适用:
- [root@svr5 ~]# chmod 644 /tmp/test.txt //重设权限,无x
- [root@svr5 ~]# ls -l /tmp/test.txt //确认设置结果
- -rw-r--r-- 1 root root 33139 12-11 10:52 /tmp/test.txt
- [root@svr5 ~]# [ -x "/tmp/test.txt" ] && echo "可执行" || echo "不可执行"
- 不可执行
- [root@svr5 ~]# chmod +x /tmp/test.txt //添加x权限
- [root@svr5 ~]# [ -x "/tmp/test.txt" ] && echo "可执行" || echo "不可执行"
- 可执行
步骤五:多个条件/操作的逻辑组合
1)&&,逻辑与
给定条件必须都成立,整个测试结果才为真。
检查变量X的值是否大于10,且小于30:
- [root@svr5 ~]# X=20 //设置X变量的值为20
- [root@svr5 ~]# [ $X -gt 10 ] && [ $X -lt 30 ] && echo "YES"
- YES
2)||,逻辑或
只要其中一个条件成立,则整个测试结果为真。
只要/tmp/、/var/spool/目录中有一个可写,则条件成立:
- [root@svr5 ~]# [ -w "/tmp/" ] || [ -w "/var/spool/" ] && echo "OK"
- OK
2 案例2:使用if选择结构
2.1 问题
本案例要求编写3个Shell脚本,分别实现以下目标:
- 检测/media/cdrom目录,若不存在则创建
- 检测并判断指定的主机是否可ping通
- 从键盘读取一个论坛积分,判断论坛用户等级,等级分类如下:
大于等于90 神功绝世
大于等于80,小于90 登峰造极
大于等于70,小于80 炉火纯青
大于等于60,小于70 略有小成
小于60 初学乍练
2.2 方案
if单分支的语法组成:
- if 条件测试
- then
- 命令序列
- fi
if双分支的语法组成:
- if 条件测试
- then
- 命令序列1
- else
- 命令序列2
- fi
if多分支的语法组成:
- if 条件测试1 ;then
- 命令序列1
- elif 条件测试2 ;then
- 命令序列2
- else
- 命令序列n
- fi
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:检测/media/cdrom目录,若不存在则创建
1)编写脚本如下:
- [root@svr5 ~]# vim mountdir.sh
- #!/bin/bash
- dir="/media/cdrom/"
- if [ ! -d $dir ]
- then
- mkdir -p $dir
- fi
- [root@svr5 ~]# chmod +x mountdir.sh //添加可执行权限
2)测试、验证脚本功能
- [root@svr5 ~]# ls -ld /media/cdrom //本来没有/media/cdrom目录
- ls: /media/cdrom: 没有那个文件或目录
- [root@svr5 ~]# ./mountdir.sh //执行脚本
- [root@svr5 ~]# ls -ld /media/cdrom //再检查已经有了
- drwxr-xr-x 2 root root 4096 12-11 15:16 /media/cdrom
有了/media/cdrom文件夹以后,再次执行上述脚本,实际上不做任何有效操作:
- [root@svr5 ~]# ./mountdir.sh
步骤二:检测并判断指定的主机是否可ping通
1)分析任务需求
使用ping命令检测目标主机时,人工可直接判断反馈结果,而脚本却不方便。但是当ping测试成功时,执行状态$?的值为0;而ping测试失败时,$?的值不为0。因此在Shell脚本中可以利用这一点来判断ping目标主机的成败。
为了节省ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 1)。比如,检查可ping通的主机:
- [root@svr5 ~]# ping -c 3 -i 0.2 -W 1 192.168.4.5
- PING 192.168.4.5 (192.168.4.5) 56(84) bytes of data.
- 64 bytes from 192.168.4.5: icmp_seq=1 ttl=64 time=0.131 ms
- 64 bytes from 192.168.4.5: icmp_seq=2 ttl=64 time=0.076 ms
- 64 bytes from 192.168.4.5: icmp_seq=3 ttl=64 time=0.073 ms
- --- 192.168.4.5 ping statistics ---
- 3 packets transmitted, 3 received, 0% packet loss, time 402ms
- rtt min/avg/max/mdev = 0.073/0.093/0.131/0.027 ms
- [root@svr5 ~]# echo $? //执行状态表示成功
- 0
2)脚本编写参考如下:
- [root@svr5 ~]# vim pinghost.sh
- #!/bin/bash
- ping -c 3 -i 0.2 -W 1 $1 &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host $1 is up."
- else
- echo "Host $1 is down."
- fi
- [root@svr5 ~]# chmod +x pinghost.sh
3)测试、验证脚本功能
- [root@svr5 ~]# ./pinghost.sh 192.168.4.5
- Host 192.168.4.5 is up.
- [root@svr5 ~]# ./pinghost.sh 192.168.4.50
- Host 192.168.4.50 is down.
步骤三:从键盘读取一个论坛积分,判断论坛用户等级
1)脚本编写参考如下:
大于等于90 神功绝世
大于等于80,小于90 登峰造极
大于等于70,小于80 炉火纯青
大于等于60,小于70 略有小成
小于60 初学乍练
- [root@svr5 ~]# vim grade.sh
- #!/bin/bash
- read -p "请输入积分(0-100):" JF
- if [ $JF -ge 90 ] ; then
- echo "$JF 分,神功绝世"
- elif [ $JF -ge 80 ] ; then
- echo "$JF 分,登峰造极"
- elif [ $JF -ge 70 ] ; then
- echo "$JF 分,炉火纯青"
- elif [ $JF -ge 60 ] ; then
- echo "$JF 分,略有小成"
- else
- echo "$JF 分,初学乍练"
- fi
- [root@svr5 ~]# chmod +x grade.sh
3)测试、验证脚本
- [root@svr5 ~]# ./grade.sh
- 请输入积分(0-100):74
- 74 分,炉火纯青
- [root@svr5 ~]# ./grade.sh
- 请输入分数(0-100):68
- 68 分,略有小成
- [root@svr5 ~]# ./grade.sh
- 请输入分数(0-100):87
- 87 分,登峰造极
3 案例3:使用for循环结构
3.1 问题
本案例要求编写一个Shell脚本chkhosts.sh,利用for循环来检测多个主机的存活状态,相关要求及说明如下:
- 对192.168.4.0/24网段执行ping检测
- 脚本能遍历ping各主机,并反馈存活状态
执行检测脚本以后,反馈结果如图-1所示。
图-1
3.2 方案
在Shell脚本应用中,常见的for循环采用遍历式、列表式的执行流程,通过指定变量从值列表中循环赋值,每次复制后执行固定的一组操作。
for循环的语法结构如下所示:
- for 变量名 in 值列表
- do
- 命令序列
- done
- for 变量名 in {1..5}
- do
- 命令序列
- done
- for 变量名 in `seq 5`
- do
- 命令序列
- done
- for 变量名 in `ls /etc/*.conf`
- do
- 命令序列
- done
3.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习for循环基本用法
脚本1,通过循环批量显示5个hello world:
- [root@svr5 ~]# vim for01.sh
- #!/bin/bash
- for i in 1 2 3 4 5
- do
- echo "hello world"
- done
- [root@svr5 ~]# chmod +x for01.sh
- [root@svr5 ~]# ./for01.sh
脚本2,通过循环批量显示10个hello world:
- [root@svr5 ~]# vim for02.sh
- #!/bin/bash
- for i in {1..10}
- do
- echo "hello world"
- done
- [root@svr5 ~]# chmod +x for02.sh
- [root@svr5 ~]# ./for02.sh
脚本3,通过循环批量显示10个数字:
- [root@svr5 ~]# vim for03.sh
- #!/bin/bash
- for i in {1..10}
- do
- echo "$i"
- done
- [root@svr5 ~]# chmod +x for03.sh
- [root@svr5 ~]# ./for03.sh
步骤二:批量检测多个主机的存活状态
1)编写脚本如下:
命令备注:ping命令可以测试某台主机的连通性,
使用-c选项可以设置ping的次数,
使用-i选项可以设置多次ping之间的间隔时间(单位秒),
使用-W选项可以设置ping不通时的超时时间(单位秒)。
- [root@svr5 ~]# vim chkhosts.sh
- #!/bin/bash
- for i in {1..254}
- do
- ping -c 3 -i 0.2 -W 1 192.168.4.$i &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host 192.168.4.$i is up."
- else
- echo "Host 192.168.4.$i is down."
- fi
- done
- [root@svr5 ~]# chmod +x chkhosts.sh
4)测试、验证脚本
- … …
- [root@svr5 ~]# ./chkhosts.sh
- Host 192.168.4.5 is up.
- Host 192.168.4.6 is down
- … …
步骤三:创建账户的案例
创建users.txt,写入无规律的账户名称,最后使用for循环读取该文件,批量创建账户并设置密码。
- [root@svr5 ~]# vim addfor.sh
- #!/bin/bash
- for i in `cat /root/user.txt`
- do
- useradd $i
- echo 123456 | passwd --stdin $i
- done
附加扩展知识(C语言风格的for循环语法格式)
- [root@svr5 ~]# vim cfor.sh
- #!/bin/bash
- for ((i=1;i<=5;i++))
- do
- echo $i
- done
4 案例4:使用while循环结构
4.1 问题
本案例要求编写2个使用while循环的脚本程序,分别实现以下目标:
- 提示用户猜测一个随机数,直到才对为止
- 检测192.168.4.0/24网段,列出不在线的主机地址
4.2 方案
while循环属于条件式的执行流程,会反复判断指定的测试条件,只要条件成立即执行固定的一组操作,直到条件变化为不成立为止。所以while循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环。
while循环的语法结构如下所示:
- while 条件测试
- do
- 命令序列
- done
- while :
- do
- 命令序列
- done
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:练习while循环基本用法
脚本1,无心的死循环脚本:
- [root@svr5 ~]# vim while01.sh
- #!/bin/bash
- i=1
- while [ $i -le 5 ]
- do
- echo "$i"
- done
- [root@svr5 ~]# chmod +x while01.sh
- [root@svr5 ~]# ./while01.sh //死循环,需要使用Ctrl+C终止脚本
脚本2,有效循环脚本:
- [root@svr5 ~]# vim while02.sh
- #!/bin/bash
- i=1
- while [ $i -le 5 ]
- do
- echo "$i"
- let i++
- done
- [root@svr5 ~]# chmod +x while02.sh
- [root@svr5 ~]# ./while02.sh
脚本3,死循环的一般格式:
- [root@svr5 ~]# vim while03.sh
- #!/bin/bash
- while :
- do
- echo "hello world"
- done
- [root@svr5 ~]# chmod +x while03.sh
- [root@svr5 ~]# ./while03.sh //死循环,需要使用Ctrl+C终止脚本
步骤二:提示用户猜测一个随机数,直到才对为止
使用系统自带变量RANDOM提取随机数(1-100),使用while :制作死循环。
脚本编写参考如下:
- [root@svr5 ~]# vim guess.sh
- #!/bin/bash
- num=$[RANDOM%100+1]
- i=0
- while :
- do
- read -p "随机数1-100,你猜:" guess
- let i++ //猜一次,计数器加1,统计猜的次数
- if [ $guess -eq $num ];then
- echo "恭喜,猜对了"
- echo "你猜了$i次"
- exit
- elif [ $guess -gt $num ];then
- echo "猜大了"
- else
- echo "猜小了"
- fi
- [root@svr5 ~]# chmod +x guess.sh
执行脚本并验证结果:
- [root@svr5 ~]# ./guess.sh
步骤三:检测192.168.4.0/24网段,列出不在线的主机地址
1)任务需求及思路分析
要求的是“检测192.168.4.0/24网段,列出不在线的主机地址”。
检测目标是一个网段,其网络部分“192.168.4.”可以作为固定的前缀;而主机部分包括从1~254连续的地址,所以可结合while循环和自增变量进行控制。
2)根据实现思路编写脚本
- [root@svr5 ~]# vim chknet.sh
- #!/bin/bash
- i=1
- while [ $i -le 254 ]
- do
- IP="192.168.4.$i"
- ping -c 3 -i 0.2 -W 1 $IP &> /dev/null
- if [ $? -eq 0 ] ; then
- echo "Host $IP is up."
- else
- echo "Host $IP is down."
- fi
- let i++
- done
- [root@svr5 ~]# chmod +x chknet.sh
3)测试、验证脚本
- [root@svr5 ~]# ./chknet.sh
- Host 192.168.4.1 is down.
- Host 192.168.4.2 is down.
- Host 192.168.4.3 is down.
- Host 192.168.4.4 is down.
- Host 192.168.4.5 is up.
- .. ..
- Host 192.168.4.250 is down.
- Host 192.168.4.251 is down.
- Host 192.168.4.252 is down.
- Host 192.168.4.253 is down.
- Host 192.168.4.254 is down.
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- C++两天一个程序(一)
#include using namespace std;main() { int i = 7; int* ip = &i; int** ipp = &ip; cout << "Address " << ip << " contains " << *ip << endl; cout << "Address " <&l…...
2024/3/2 9:38:55 - 心理学家:当孩子伸手向你要钱时,你的态度决定了孩子的未来!
原标题:心理学家:当孩子伸手向你要钱时,你的态度决定了孩子的未来!经常在超市和商场里,父母都肆无忌惮的吼骂孩子,完全不在乎周围是否有人,而背后的原因只是因为孩子看中了某个玩具,或者看中了某件衣服,这个时候父母都会大声吼叫孩子,父母会以没有钱为理由,拒绝孩子…...
2024/4/23 11:20:54 - LeetCode刷题记录--1338. 数组大小减半
1338. 数组大小减半难度 中等给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。返回 至少 能删除数组中的一半整数的整数集合的最小大小。示例 1:输入:arr = [3,3,3,3,5,5,5,2,2,7] 输出:2 解释:选择 {3,7} 使得结果数组为 [5,5,5,2,…...
2024/4/23 11:21:00 - 饿了么el-upload上传图片限制图片尺寸、大小、格式
饿了么中的Upload组件已经提供了限制用户上传的图片格式和大小的例子(https://element.eleme.io/#/zh-CN/component/upload),在此又新加图片的尺寸<el-uploadclass="avatar-uploader"action="":show-file-list="false":before-upload=&quo…...
2024/4/23 11:21:00 - 疫情之战,或将加速推动短视频的发展?
原标题:疫情之战,或将加速推动短视频的发展?2019年,看主播推荐好物,视频直播带货火了,抖音抖出了网红奶茶,网红经典,网红食物,网红歌曲,网红歌手…………短视频被赋予娱乐和营销属性,短视频除了这个属性,也为权威发布提供了窗口。 在这次疫情对抗战中,“人民日报…...
2024/4/23 11:20:51 - BigDecimal 详解
BigDecimal 详解 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。 BigDecimal表示功能强大小数的意思,Decimal翻译是小数的。 BigDecimal所创建的是对象,故我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调…...
2024/4/23 11:20:57 - 第三章 7-11 求整数的位数及各位数字之和
n=str(input()) length = len(n) s = sum(map(lambda x: int(x),n)) print({} {}.format(length,s))...
2024/4/23 11:20:50 - 什么是股票配资?如何选择一家正规专业的配资公司?
原标题:什么是股票配资?如何选择一家正规专业的配资公司?只要在股市圈里混的人应该都知道“股票配资”,毕竟自配资行业兴起以来,大大小小的股票配资平台开始出现在人们的视野。可以说股票配资与我们投资生活之间的联系越来越紧密,通过股票配资平台来炒股也逐渐成为一种常…...
2024/4/23 11:20:51 - 设计模式:单例模式
单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以…...
2024/4/23 11:20:47 - 复试上机指南之数据结构二
二叉树 二叉树的前、中、后序、层次遍历 struct tree{char c;tree* leftnode;tree* rightnode; }; //先序遍历 void preorder(tree* root){if(root==NULL){return;}cout<<root->c;preorder(root->leftnode);preorder(root->rightnode);return; } //中序遍历 …...
2024/4/23 11:20:53 - 一日三枣,健康不显老;红枣怎样吃营养价值高!
原标题:一日三枣,健康不显老;红枣怎样吃营养价值高!俗话说,“一日吃三枣,一辈子不显老”。红枣最突出的特点是维生素含量高。中医认为,枣能补中益气、养血生津。 鲜枣维生素含量更丰富;但是它有时令性,不能常买到,而且多吃可能伤害消化功能。干枣虽然维生素含量下降…...
2024/4/23 11:20:48 - C语言笔记(4)
C语言笔记(4) 关键词:getchar()和 scanf()属于行缓冲输入,键盘输入Enter键会传送一个换行符需注意,文本输入无碍; 函数避免代码重复,让程序更加模块化, 提高程序代码的可读性, 更方便后期维护; 声明函数类型指的是返回值的类型, 不是函数参数的类型; 递归注意合适结束…...
2024/4/15 10:40:54 - 春节电影已全部官宣撤档影院歇业开门另行通知
原标题:春节电影已全部官宣撤档影院歇业开门另行通知温馨提示 太阳四楼 电话 0854-⑥②②⑤⑤⑤⑤ 叶问系列完结篇《叶问4》曝先导预告 甄子丹打进美国海军陆战队 责任编辑:...
2024/4/15 10:40:53 - ※python3.7 Anaconda PyHook3安装测试! 必看!
环境:python:3.7.3(Anaconda)本文主要讲述:一、PyHook3的安装依赖包:二、PyHook3的几种安装方法:(建议采用第三种方法)1.直接conda 或者 pip安装(通常会因为各种原因报错)2.从pyhook官网下载压缩包进行安装3.下载pyhook的wml/egg格式的安装包三、 几点说明一、PyHook3…...
2024/4/15 10:40:51 - 历代草书大家,领略畅快淋漓之美
原标题:历代草书大家,领略畅快淋漓之美草书始于汉初,有存字之梗概,损隶之规矩,纵任奔逸,赴速急就等特点。又有章草、今草、狂草之分,于狂乱之中现优美!今天,就让我们一起从历代草书大家作品中领略畅快淋漓之美吧! 章草, 是早期的草书, 由草写的隶书演变而成的标准…...
2024/4/15 10:40:50 - css布局方案和机制大全
本文章主要系统性讲解和汇总css与布局相关的知识,便于大家后续查阅和讨论。整体而言,css布局的技术,主要与display、table、float相关,如果去除table布局,则核心是display与float属性之间的结合使用,来达到多样化的页面布局效果。布局的核心是处理纵向和横向分布的问题,…...
2024/4/15 10:40:52 - 【笃行学堂】绘本故事|少儿科普:新冠病毒的自述,“疫情还没结束,你们抓紧出门聚集!”
原标题:【笃行学堂】绘本故事|少儿科普:新冠病毒的自述,“疫情还没结束,你们抓紧出门聚集!”为了祖国的未来,快来关注我们吧 END 转自少女兔 (ID:iiilass) 责任编辑:...
2024/4/27 6:57:06 - 折线图通用绘制模板
import numpy as np import pandas as pd import matplotlib.pyplot as plt from datetime import timedelta# 正常显示中文标签 plt.rcParams[font.sans-serif] = [SimHei]# 正常显示负号 plt.rcParams[axes.unicode_minus] = False # 读取每日销售数据 df = pd.read_excel(.…...
2024/4/15 10:40:47 - 条件测试 、 if选择结构 、 循环结构
Shell脚本的智能化使Shell脚本获得识别能力为命令的执行提供最直接的识别依据-文件或目录的读/写等状态-数值的大小-字符串是否匹配-多条件组合test 测试操作语法格式-test 选项 参数-[ 选项 参数 ]test a == a #判断a是否等于aecho #? #查看结果[ a==a ] #另一种格…...
2024/4/15 10:40:46 - 作家刘建燃编剧执导的电影《天黑来吻你》近日上映!
原标题:作家刘建燃编剧执导的电影《天黑来吻你》近日上映!由大田人刘建燃 编剧执导的电影《天黑来吻你》 近日在网络上映 刘建燃 1983年生 大田湖美人 福建省作家协会会员;福建省电影家协会会员。青年小说家;新生代导演;全国首届“浩然文学奖”获得者;电影《天黑来吻…...
2024/4/23 11:20:45
最新文章
- 开源农场管理软件
软件介绍 Tania是一款基于Go、Vue.JS和SQLite的开源农场日记软件。该项目始于2016年11月,由于无法找到适合自己需求的软件,开发团队决定自己搭建一套适合家庭后院花园的管理系统,并可以随时随地进行管理。 项目功能描述 Tania是一款免费且开源…...
2024/5/3 0:55:32 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 嵌入式硬件中常见的面试问题与实现
1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…...
2024/5/2 2:32:41 - Jenkins 使用 Description Setter
想要的效果如图: 在打包完成之后直接在构件历史的部分展示出来构建的docker镜像名,这样就不需要去找日志了。 首先安装插件 Description Setter, 如何安装就不在此赘述了。 安装完成之后,在构件后操作选项添加一个流程, 有两个字段: regular expressi…...
2024/5/1 4:32:53 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/2 9:28:15 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57