【BASH】回顾与知识点梳理(十九)

【BASH】回顾与知识点梳理 十九

    • 十九. 循环 (loop)
      • 19.1 while do done, until do done (不定循环)
      • 19.2 for...do...done (固定循环)
      • 19.3 for...do...done 的数值处理(C写法)
      • 19.4 搭配随机数与数组的实验
      • 19.5 shell script 的追踪与 debug
      • 19.6 what_to_eat-2.sh debug结果解析

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

十九. 循环 (loop)

除了 if…then…fi 这种条件判断式之外,循环可能是程序当中最重要的一环了~ 循环可以不断的执行某个程序段落,直到用户设定的条件达成为止。 所以,重点是那个『条件的达成』是什么。除了这种依据判断式达成与否的不定循环之外, 还有另外一种已经固定要跑多少次的循环形态,可称为固定循环的形态呢!底下我们就来谈一谈:

19.1 while do done, until do done (不定循环)

一般来说,不定循环最常见的就是底下这两种状态了:

while [ condition ] <==中括号内的状态就是判断式 
do <==do 是循环的开始!程序段落
done <==done 是循环的结束

while 的中文是『当…时』,所以,这种方式说的是『当 condition 条件成立时,就进行循环,直到condition 的条件不成立才停止』的意思。还有另外一种不定循环的方式:

until [ condition ] 
do程序段落
done

这种方式恰恰与 while 相反,它说的是『当 condition 条件成立时,就终止循环, 否则就持续进行循环的程序段。』是否刚好相反啊~我们以 while 来做个简单的练习好了。 假设我要让使用者输入yes 或者是 YES 才结束程序的执行,否则就一直进行告知用户输入字符串。

[dmtsai@study bin]$ vim yes_to_stop.sh
#!/bin/bash
# Program:
# Repeat question until user input correct answer.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
doread -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."

上面这个例题的说明是『当 ${yn} 这个变数不是 “yes” 且 ${yn} 也不是 “YES” 时,才进行循环内的程序。』 而如果 ${yn} 是 “yes” 或 “YES” 时,就会离开循环啰~那如果使用 until 呢?呵呵有趣啰~ 他的条件会变成这样:

[dmtsai@study bin]$ vim yes_to_stop-2.sh
#!/bin/bash
# Program:
# Repeat question until user input correct answer.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
until [ "${yn}" == "yes" -o "${yn}" == "YES" ]
doread -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."

仔细比对一下这两个东西有啥不同喔! ^_^再来,如果我想要计算 1+2+3+…+100 这个数据呢? 利用循环啊~他是这样的:

[dmtsai@study bin]$ vim cal_1_100.sh
#!/bin/bash
# Program:
# Use loop to calculate "1+2+3+...+100" result.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
s=0 # 这是加总的数值变数
i=0 # 这是累计的数值,亦即是 1, 2, 3....
while [ "${i}" != "100" ]
do
i=$(($i+1)) # 每次 i 都会增加 1
s=$(($s+$i)) # 每次都会加总一次!
done
echo "The result of '1+2+3+...+100' is ==> $s"

嘿嘿!当你执行了『 sh cal_1_100.sh 』之后,就可以得到 5050 这个数据才对啊!这样瞭呼~ 那么让你自行做一下,如果想要让用户自行输入一个数字,让程序由 1+2+… 直到你输入的数字为止, 该如何撰写呢?应该很简单吧?答案可以参考一下习题练习里面的一题喔!

19.2 for…do…done (固定循环)

相对于 while, until 的循环方式是必须要『符合某个条件』的状态, for 这种语法,则是『 已经知道要进行几次循环』的状态!他的语法是:

for var in con1 con2 con3 ...
do程序段
done

以上面的例子来说,这个 $var 的变量内容在循环工作时:

  1. 第一次循环时, $var 的内容为 con1 ;
  2. 第二次循环时, $var 的内容为 con2 ;
  3. 第三次循环时, $var 的内容为 con3 ;

我们可以做个简单的练习。假设我有三种动物,分别是 dog, cat, elephant 三种, 我想每一行都输出这样:『There are dogs…』之类的字样,则可以:

[dmtsai@study bin]$ vim show_animal.sh
#!/bin/bash
# Program:
# Using for .... loop to print 3 animals
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
for animal in dog cat elephant
doecho "There are ${animal}s.... "
done

等你执行之后就能够发现这个程序运作的情况啦!让我们想象另外一种状况,由于系统上面的各种账号都是写在 /etc/passwd 内的第一个字段,你能不能透过管线命令的 cut 捉出单纯的账号名称后,以 id 分别检查使用者的标识符与特殊参数呢?由于不同的 Linux 系统上面的账号都不一样!此时实际去捉 /etc/passwd 并使用循环处理,就是一个可行的方案了!程序可以如下:

[dmtsai@study bin]$ vim userid.sh
#!/bin/bash
# Program
# Use id, finger command to check system account's information.
# History
# 2015/07/17 VBird first release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
users=$(cut -d ':' -f1 /etc/passwd) # 撷取账号名称
for username in ${users} # 开始循环进行!
doid ${username}
done

cat /etc/passwd|cut -d":" -f 1|xargs -n 1 id

执行上面的脚本后,你的系统账号就会被捉出来检查啦!这个动作还可以用在每个账号的删除、重整上面呢! 换个角度来看,如果我现在需要一连串的数字来进行循环呢?举例来说,我想要利用 ping 这个可以判断网络状态的指令, 来进行网络状态的实际侦测时,我想要侦测的网域是本机所在的192.168.1.1~192.168.1.100,由于有 100 台主机, 总不会要我在 for 后面输入 1 到 100 吧?此时你可以这样做喔!

[dmtsai@study bin]$ vim pingip.sh
#!/bin/bash
# Program
# Use ping command to check the network's PC state.
# History
# 2015/07/17 VBird first release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
network="192.168.1" # 先定义一个网域的前面部分!
for sitenu in $(seq 1 100) # seq 为 sequence(连续) 的缩写之意
do
# 底下的程序在取得 ping 的回传值是正确的还是失败的!ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0 || result=1
# 开始显示结果是正确的启动 (UP) 还是错误的没有连通 (DOWN)if [ "${result}" == 0 ]; thenecho "Server ${network}.${sitenu} is UP."elseecho "Server ${network}.${sitenu} is DOWN."fi
done

上面这一串指令执行之后就可以显示出 192.168.1.1~192.168.1.100 共 100 部主机目前是否能与你的机器连通! 如果你的网域与鸟哥所在的位置不同,则直接修改上头那个 network 的变量内容即可!其实这个范例的重点在 $(seq ..) 那个位置!那个 seq 是连续 (sequence) 的缩写之意!代表后面接的两个数值是一直连续的! 如此一来,就能够轻松的将连续数字带入程序中啰!

除了使用 $(seq 1 100) 之外,你也可以直接使用 bash 的内建机制来处理喔!可以使用{1..100} 来取代 $(seq 1 100) !那个大括号内的前面/后面用两个字符,中间以两个小数点来代表连续出现的意思!例如要持续输出 a, b, c…g 的话, 就可以使用『 echo {a…g} 』这样的表示方式!

最后,让我们来玩判断式加上循环的功能!我想要让用户输入某个目录文件名, 然后我找出某目录内的文件名的权限,该如何是好?呵呵!可以这样做啦~

[dmtsai@study bin]$ vim dir_perm.sh
#!/bin/bash
# Program:
# User input dir name, I find the permission of files.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
# 1. 先看看这个目录是否存在啊?
read -p "Please input a directory: " dir
if [ "${dir}" == "" -o ! -d "${dir}" ]; then
echo "The ${dir} is NOT exist in your system."
exit 1
fi
# 2. 开始测试文件啰~
filelist=$(ls ${dir}) # 列出所有在该目录下的文件名
for filename in ${filelist}
do
perm=""
test -r "${dir}/${filename}" && perm="${perm} readable"
test -w "${dir}/${filename}" && perm="${perm} writable"
test -x "${dir}/${filename}" && perm="${perm} executable"
echo "The file ${dir}/${filename}'s permission is ${perm} "
done

呵呵!很有趣的例子吧~利用这种方式,你可以很轻易的来处理一些文件的特性呢。接下来,让我们来玩玩另一种 for 循环的功能吧!主要用在数值方面的处理喔!

19.3 for…do…done 的数值处理(C写法)

除了上述的方法之外,for 循环还有另外一种写法!语法如下:

for (( 初始值; 限制值; 执行步阶 )) 
do程序段
done

这种语法适合于数值方式的运算当中,在 for 后面的括号内的三串内容意义为:

  • 初始值:某个变量在循环当中的起始值,直接以类似 i=1 设定好;
  • 限制值:当变量的值在这个限制值的范围内,就继续进行循环。例如 i<=100;
  • 执行步阶:每作一次循环时,变量的变化量。例如 i=i+1。

值得注意的是,在『执行步阶』的设定上,如果每次增加 1 ,则可以使用类似『i++』的方式,亦即是 i 每次循环都会增加一的意思。好,我们以这种方式来进行 1 累加到使用者输入的循环吧!

[dmtsai@study bin]$ vim cal_1_100-2.sh
#!/bin/bash
# Program:
# Try do calculate 1+2+....+${your_input}
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input a number, I will count for 1+2+...+your_input: " nu
s=0
for (( i=1; i<=${nu}; i=i+1 ))
dos=$((${s}+${i}))
done
echo "The result of '1+2+3+...+${nu}' is ==> ${s}"

一样也是很简单吧!利用这个 for 则可以直接限制循环要进行几次呢!

19.4 搭配随机数与数组的实验

现在你大概已经能够掌握 shell script 了!好了!让我们来做个小实验!假设你们公司的团队中,经常为了今天中午要吃啥搞到头很昏! 每次都用猜拳的~好烦喔~有没有办法写支脚本,用脚本搭配随机数来告诉我们,今天中午吃啥好?呵呵!执行这只脚本后, 直接跟你说要吃啥~那比猜拳好多了吧?哈哈!

要达成这个任务,首先你得要将全部的店家输入到一组数组当中,再透过随机数的处理,去取得可能的数值,再将搭配到该数值的店家秀出来即可! 其实也很简单!让我们来实验看看:

[dmtsai@study bin]$ vim what_to_eat.sh
#!/bin/bash
# Program:
# Try do tell you what you may eat.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATHeat[1]="卖当当汉堡" # 写下你所收集到的店家!
eat[2]="肯爷爷炸鸡"
eat[3]="彩虹日式便当"
eat[4]="越油越好吃大雅"
eat[5]="想不出吃啥学餐"
eat[6]="太师父便当"
eat[7]="池上便当"
eat[8]="怀念火车便当"
eat[9]="一起吃泡面"
eatnum=9 # 需要输入有几个可用的餐厅数!check=$(( ${RANDOM} * ${eatnum} / 32767 + 1 ))
echo "your may eat ${eat[${check}]}"

立刻执行看看,你就知道该吃啥了!非常有趣吧!不过,这个例子中只选择一个样本,不够看!如果想要每次都秀出 3 个店家呢? 而且这个店家不能重复喔!重复当然就没啥意义了!所以,你可以这样作!

[dmtsai@study bin]$ vim what_to_eat-2.sh
#!/bin/bash
# Program:
# Try do tell you what you may eat.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
eat[1]="卖当当汉堡"
eat[2]="肯爷爷炸鸡"
eat[3]="彩虹日式便当"
eat[4]="越油越好吃大雅"
eat[5]="想不出吃啥学餐"
eat[6]="太师父便当"
eat[7]="池上便当"
eat[8]="怀念火车便当"
eat[9]="一起吃泡面"
eatnum=9
eated=0
while [ "${eated}" -lt 3 ]; docheck=$(( ${RANDOM} * ${eatnum} / 32767 + 1 ))mycheck=0if [ "${eated}" -ge 1 ]; thenfor i in $(seq 1 ${eated} )doif [ ${eatedcon[$i]} == $check ]; thenmycheck=1fidonefiif [ ${mycheck} == 0 ]; thenecho "your may eat ${eat[${check}]}"eated=$(( ${eated} + 1 ))eatedcon[${eated}]=${check}fi
done

透过随机数、数组、循环与条件判断,你可以做出很多很特别的东西!还不用写传统程序语言~试看看~挺有趣的呦!

19.5 shell script 的追踪与 debug

scripts 在执行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要透过直接执行该 scripts 就可以来判断是否有问题呢?呵呵!当然是有的!我们就直接以 bash 的相关参数来进行判断吧!

[dmtsai@study ~]$ sh [-nvx] scripts.sh
选项与参数:
-n :不要执行 script,仅查询语法的问题;
-v :再执行 script 前,先将 scripts 的内容输出到屏幕上;
-x :将使用到的 script 内容显示到屏幕上,这是很有用的参数!
# 范例一:测试 dir_perm.sh 有无语法的问题?
[dmtsai@study ~]$ sh -n dir_perm.sh 
# 若语法没有问题,则不会显示任何信息!
# 范例二:将 show_animal.sh 的执行过程全部列出来~
[dmtsai@study ~]$ sh -x show_animal.sh 
+ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin
+ export PATH
+ for animal in dog cat elephant
+ echo 'There are dogs.... '
There are dogs....
+ for animal in dog cat elephant
+ echo 'There are cats.... '
There are cats....
+ for animal in dog cat elephant
+ echo 'There are elephants.... '
There are elephants....

请注意,上面范例二中执行的结果并不会有颜色的显示!鸟哥为了方便说明所以在 + 号之后的数据都加上颜色了! 在输出的讯息中,在加号后面的数据其实都是指令串,由于 sh -x 的方式来将指令执行过程也显示出来, 如此用户可以判断程序代码执行到哪一段时会出现相关的信息!这个功能非常的棒!透过显示完整的指令串, 你就能够依据输出的错误信息来订正你的脚本了!

熟悉 sh 的用法,将可以使你在管理 Linux 的过程中得心应手!至于在 Shell scripts 的学习方法上面,需要『多看、多模仿、并加以修改成自己的样式!』 是最快的学习手段了!网络上有相当多的朋友在开发一些相当有用的 scripts ,若是你可以将对方的 scripts 拿来,并且改成适合自己主机的样子!那么学习的效果会是最快的呢!

另外,我们 Linux 系统本来就有很多的服务启动脚本,如果你想要知道每个 script 所代表的功能是什么? 可以直接以 vim 进入该 script 去查阅一下,通常立刻就知道该 script 的目的了。举例来说,我们之前一直提到的 /etc/init.d/netconsole ,这个 script 是干嘛用的? 利用 vim 去查阅最前面的几行字,他出现如下信息:

# netconsole This loads the netconsole module with the configured parameters.
# chkconfig: - 50 50
# description: Initializes network console logging
# config: /etc/sysconfig/netconsole

意思是说,这个脚本在设定网络终端机来应付登入的意思,且配置文件在 /etc/sysconfig/netconsole 设定内! 所以,你写的脚本如果也能够很清楚的交待,那就太棒了!

19.6 what_to_eat-2.sh debug结果解析

[root@node-135 bin]# sh -x what_to_eat-2.sh
+ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/root/bin
+ export PATH
+ eat[1]=卖当当汉堡
+ eat[2]=肯爷爷炸鸡
+ eat[3]=彩虹日式便当
+ eat[4]=越油越好吃大雅
+ eat[5]=想不出吃啥学餐
+ eat[6]=太师父便当
+ eat[7]=池上便当
+ eat[8]=怀念火车便当
+ eat[9]=一起吃泡面
+ eatnum=9				#店家总数
+ eated=0				#默认while循环参数0
+ '[' 0 -lt 3 ']'	#第一次while循环 eated==0
+ check=8				#获取的随机选择为8,即eat[8]=怀念火车便当
+ mycheck=0			#区别重复的参数为0,默认值
+ '[' 0 -ge 1 ']' #进入第一个if,判断条件不符,结束该判断
+ '[' 0 == 0 ']'	#进入第二个if,判断条件符合,执行该判断
+ echo 'your may eat 怀念火车便当'	#打印选择
your may eat 怀念火车便当
+ eated=1				#while循环参数+1
+ eatedcon[${eated}]=8	#已选店家数组,加入已选值,此时eatedcon[1]=8
+ '[' 1 -lt 3 ']'	#第二次while循环 eated==1
+ check=9				#获取的随机选择为9,即eat[9]=一起吃泡面
+ mycheck=0			#区别重复的参数仍为0
+ '[' 1 -ge 1 ']' #进入第一个if,判断条件符合,执行该判断
++ seq 1 1				#第一个for的循环序列1到1,所以只能执行1
+ for i in '$(seq 1 ${eated} )'#第一个for循环
+ '[' 8 == 9 ']'	#for循环中的if,判断是否重复,本次不重复,结束循环
+ '[' 0 == 0 ']'	#进入第二个if,判断条件符合,执行该判断
+ echo 'your may eat 一起吃泡面'	#打印选择
your may eat 一起吃泡面
+ eated=2				#while循环参数+1
+ eatedcon[${eated}]=9#已选店家数组,加入已选值,此时eatedcon[1]=8,eatedcon[2]=9
+ '[' 2 -lt 3 ']'#第三次while循环 eated==2
+ check=1			  #获取的随机选择为1,即eat[1]=卖当当汉堡
+ mycheck=0			#区别重复的参数仍为0
+ '[' 2 -ge 1 ']'	#进入第一个if,判断条件符合,执行该判断
++ seq 1 2				#第一个for的循环序列1到2,所以能执行1,2
+ for i in '$(seq 1 ${eated} )'#第一个for循环的第一次,共2次
+ '[' 8 == 1 ']'	#for循环中的if,判断是否和已选店家数组eatedcon[1]内容重复,本次不重复,结束判断
+ for i in '$(seq 1 ${eated} )'#第一个for循环的第二次,共2次
+ '[' 9 == 1 ']'	#for循环中的if,判断是否和已选店家数组eatedcon[2]内容重复,本次不重复,结束判断,for循环结束
+ '[' 0 == 0 ']'	#进入第二个if,判断条件符合,执行该判断
+ echo 'your may eat 卖当当汉堡'	#打印选择
your may eat 卖当当汉堡
+ eated=3				#while循环参数+1
+ eatedcon[${eated}]=1	#已选店家数组,加入已选值,此时eatedcon[1]=8,eatedcon[2]=9,eatedcon[3]=1
+ '[' 3 -lt 3 ']'	#第三次while循环 eated==3,此时已不满足while循环条件,结束while循环,整体代码执行结束

该系列目录 --> 【BASH】回顾与知识点梳理(目录)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud源码探析(九)- Sentinel概念及使用

1.概述 在微服务的依赖调用中&#xff0c;若被调用方出现故障&#xff0c;出于自我保护的目的&#xff0c;调用方会主动停止调用&#xff0c;并根据业务需要进行对应处理&#xff0c;这种方式叫做熔断&#xff0c;是微服务的一种保护方式。为了保证服务的高可用性&#xff0c;…

即然利用反射机制可以破坏单例模式,有什么方法避免呢?

私有构造方法中添加防止多次实例化的逻辑&#xff1a;在单例类的私有构造方法中&#xff0c;可以添加逻辑来检查是否已经存在实例&#xff0c;如果存在则抛出异常或返回已有的实例。这样即使通过反射创建了新的实例&#xff0c;也能在构造方法中进行拦截。 使用枚举实现单例&a…

rknn3588如何查看npu使用情况

cat /sys/kernel/debug/rknpu/load

choices参数的使用、MTV和MVC的概念、对多的三种创建方式、Ajax技术

一、choices参数的使用 choices它是ORM中常用字段中的参数choices的作用&#xff1a;类似于一些字段&#xff1a;性别、学历、客户来源、是否上学、是否结婚等字段# 针对于一些字段它的情况能够被列举完&#xff0c;像这样的字段&#xff0c;我们在表中存储的时候一般使用choi…

windows环境下编译OpenJDK12

环境&#xff1a;Windows11 目录&#xff1a; 1、下载OpenJDK12源码 下载地址&#xff1a; https://hg.openjdk.org/jdk/jdk12 点击zip下载到本地。 解压到本地。 Tip&#xff1a;注意本地路径中最好不要包含中文或空格。 2、阅读一遍doc/building.html 如果只是想构建J…

白帽黑帽与linux安全操作

目录 白帽黑帽 Linux安全 白帽黑帽 白帽&#xff08;White Hat&#xff09;和黑帽&#xff08;Black Hat&#xff09;通常用于描述计算机安全领域中的两种不同角色。白帽黑客通常被认为是合法的安全专家&#xff0c;他们通过合法途径寻找和修复安全漏洞&#xff0c;帮助企业和…

Linux/centos上如何配置管理samba服务器?

Linux/centos上如何配置管理samba服务器&#xff1f; 1 samba服务相关知识1.1 SMB协议1.2 samba工作原理1.2.1 相关进程1.2.2 samba工作流程1.2.3 samba功能 2 samba服务器安装2.1 利用光驱安装2.2 利用光盘映射文件 3 启动与停止samba服务4 配置samba服务器4.1 samba主配置文件…

解读百威亚太2023上半年财报:啤酒大年百威如何重塑高端化之路?

随着消费者的需求提升&#xff0c;啤酒行业向高端化发展&#xff0c;其中知名度较高的百威亚太、华润啤酒、青岛啤酒、燕京啤酒、嘉士伯等品牌在高端市场持续鏖战&#xff0c;实际成果如何也可以从业绩一探究竟。 以百威亚太为例。8月3日&#xff0c;百威亚太发布2023年上半年…

记录一次electron打包提示文件找不到的解决方法

没有配置files选项 files的作用是配置打包到应用程序的构建资源 就是说如果你想使用项目那个目录下的文件 就得通过files配置一下不然就会报错 json文件或者yml文件会报的错 格式是这样的 "files": ["dist-electron", "dist"],electron打包配…

React配置代理服务器的5种方法

五种方法的介绍 以下是五种在React项目中配置代理服务器的方法的使用场景和优缺点&#xff1a; 1. 使用 http-proxy-middleware 中间件&#xff1a; 使用场景&#xff1a;适用于大多数React项目&#xff0c;简单易用。优点&#xff1a;配置简单&#xff0c;易于理解和维护。…

【C++学习】STL容器——list

目录 一、list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比…

HTTPS、TLS加密传输

HTTPS、TLS加密传输 HTTPS、TLS加密传输1、HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;2、TLS HTTPS、TLS加密传输 1、HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09; HTTPS&#xff08;HyperText Transfer Protocol Secure&#x…

Ozone命令行接口详解

命令行接口简介 Ozone Shell是命令行与Ozone交互的主要界面&#xff0c;底层用的是Java。 有些功能只能通过Ozone Shell进行操作&#xff1a; 创建带有限额限制的Volume管理内部ACLs&#xff08;访问控制列表&#xff09;创建带有加密密钥的存储桶 大部分操作除了Shell操作…

【算法挨揍日记】day01——双指针算法_移动零、 复写零

283.移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

【BASH】回顾与知识点梳理(十二)

【BASH】回顾与知识点梳理 十二 十二. Linux 文件与目录管理12.1 目录与路径相对路径与绝对路径相对路径的用途绝对路径的用途 12.2 目录的相关操作cd (change directory, 变换目录)pwd (Print Working Directory, 显示目前所在的目录)mkdir (make directory, 建立新目录)rmdir…

生信豆芽菜-火山图绘制使用说明

网站&#xff1a;http://www.sxdyc.com/visualsVolcano 一、火山图简介 火山图是散点图的一种&#xff0c;它将统计测试中的统计显著性量度&#xff08;如p value&#xff09;和变化幅度&#xff08;logFC&#xff09;相结合&#xff0c;能够快速直观地识别那些变化幅度较大且具…

13个Python最佳编程技巧,越早知道越好

每天我们都会面临许多需要高级编码的编程挑战。你不能用简单的 Python 基本语法来解决这些问题。在本文中&#xff0c;我将分享 13 个高级 Python 脚本&#xff0c;它们可以成为你项目中的便捷工具。如果你目前还用不到这些脚本&#xff0c;你可以先添加收藏&#xff0c;以备留…

24大连交通大学813软件工程考研习题

1.等价分类法相关概念。 &#xff08;1&#xff09;等价分类法的基本思想是什么&#xff1f; 根据程序的输入特性&#xff0c;将程序的定义域划分为有限个等价区段 —“等价类”&#xff0c;从等价类中选择出的用例具有“代表性”&#xff0c;即测试某个等价类的代表值就等价…

springMVC 程序开发

目录 一. 认识 springMVC spring&#xff0c;springBoot&#xff0c;springMVC的关系 二. springMVC 的连接和获取参数 1. 注解分析&#xff08;不带参数&#xff09; 2. 获取参数 3. 获取对象参数 4. 重命名功能 5. 获取 JSON 对象 6. 通过 path 文件路径来传递参数…

新版Android Studio模拟器浮动

&#xff08;水一篇&#xff0c;但其实很多入门同学不知道&#xff09; 安装新版Andorid Studio后会发现模拟器是内嵌在AS中的&#xff0c;如何让她浮动