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

C高级——shell(3)

一、shell的选择结构

        1.回顾:C语言的选择结构:if , if else if ,if else,switch (switch的执行速度最快)

        2.shell的选择结构: 单分支if 双分支 if else 多分支if elif case..in

  1.1 shell的选择结构的格式

--------C语言的格式------
单分支if(表达式){C语句    }
双分支if(表达式){C语句1    }else{C语句2    }
多分支if(表达式1){C语句1            }else if(表达式2){C语句2;    }....else{C语句n;    }
-------------------shell的格式------
单分支if 表达式thenSHELL语句fi
执行流程:如果表达式为真,则执行shell语句,否则退出
双分支if 表达式thenshell语句1elseshell语句2fi
执行流程:如果表达式为真,则执行shell语句1,否则执行shell语句2
多分支if 表达式1thenshell语句1elif 表达式2thenshell语句2....elseshell语句nfi
执行流程:如果表达式1为真,则执行shell语句1,结束如果表达式1为假,则继续判断表达式2,如果表达式2为真,则执行shell语句2,结束重复以上过程

  1.2 shell选择结构练习

        1.输入一个数,判断奇数偶数

        2.输入一个数,判断是否是水仙花

        水仙花:各个位数字立方和等于本身,是三位数

        eg: 153==1*1*1+5*5*5+3*3*3

        if ((a%2==0))

        then

        偶数

        else

        奇数

        fi

        if ((a%2==0))

        then

        偶数

        fi

        if ((a%2!=0))

        then

        奇数

        fi

        if ((a%2==0))

        then

        偶数

        elif ((a%2!=0))

        then

        奇数

        fi

#!/bin/bashread -p "please enter a:" a
if ((a%2==0))
thenecho 偶数
elseecho 奇数
firead -p "please enter  num:" numif (($num>100&&num<999))
theng=$((num%10))s=$((num/10%10))b=$((num/100))if ((g**3+s**3+b**3==num))thenecho 是水仙花else                                echo 不是水仙换fi
elseecho 不是三位数
fi

  1.3 test指令和if结合

        1.test是一个指令:必须添加空格,必须写$,必要时写双引号 man test

        2.test实现的操作:逻辑运算,关系运算,字符串,文件

        3.test指令等价于[]

    1.3.1 test和if结合的格式

格式1:if test 表达式thenshell语句fi
格式2:if [ 表达式 ]    注意[]的左右必须添加空格thenshell语句fi

    1.3.2 test的指令

        【1】逻辑运算

                格式1:if [ 表达式1 -a 表达式2 ]

                格式2:if [ 表达式1 ] && [ 表达式2 ]

                格式3:if [ 表达式1 -o 表达式2 ]

                格式4:if [ 表达式1 ] || [ 表达式2 ]

1.判断表达式为真( EXPRESSION )EXPRESSION is true判断a不为0if(a!=0) --->if(a)   --->if [ $a ]2.判断表达式为假! EXPRESSIONEXPRESSION is false判断a等于if(a==0) ---->if(!a) ---->if [ ! $a ]
3.逻辑与运算,遇假则假,全真为真    EXPRESSION1 -a EXPRESSION2both EXPRESSION1 and EXPRESSION2 are true判断a>b>cif(a>b&&b>c) ---->if [ $a -gt $b -a $b -gt $c ]--->if [ $a -gt $b ] && [ $b -gt $c ]4.逻辑或运算,遇真则真,全假为假                                       EXPRESSION1 -o EXPRESSION2either EXPRESSION1 or EXPRESSION2 is true判断成绩不合格<0  >100if(a<0 || a>100)  --->if [ $a -lt 0 -o $a -gt 100 ]--->if [ $a -lt 0 ] || [ $a -gt 100 ]  
练习:输入一个年份,判断润年润年:能被4整除,但不可以被100整除,或者可以被400整除read -p "please enter year:" yearif [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ]
thenecho 是润年
elseecho 不是润年
fi判断偶数  ---》if [ a%4==0 ]  --->if [ $((a%4)) -eq 0 ]
        【2】关系运算
1.判断两个整数是否相等INTEGER1 -eq INTEGER2INTEGER1 is equal to INTEGER2判断a和b相等if test $a -eq $b   ----> if [ $a -eq $b ]2.判断整数1大于等于整数2       INTEGER1 -ge INTEGER2INTEGER1 is greater than or equal to INTEGER2判断a大于等于bif test $a -ge $b   ----> if [ $a -ge $b ]
3.判断整数1大于整数2    INTEGER1 -gt INTEGER2INTEGER1 is greater than INTEGER2
4.判断整数1小于等于整数2INTEGER1 -le INTEGER2INTEGER1 is less than or equal to INTEGER2
5.判断整数1小于整数2INTEGER1 -lt INTEGER2INTEGER1 is less than INTEGER2
6.判断两个整数不相等INTEGER1 -ne INTEGER2INTEGER1 is not equal to INTEGER2练习:输入三个数,实现升序排序a b c  要求:a存储最小值  b存储中间值   c存储最大值
#!/bin/bashread -p "please enter arr" -a arr#1.判断arr[0]  arr[1]
if [ ${arr[0]} -gt ${arr[1]} ]
thent=${arr[0]}arr[0]=${arr[1]}arr[1]=$t
fi#判断arr[1] arr[2]
if [ ${arr[1]} -gt ${arr[2]} ]
thent=${arr[1]}arr[1]=${arr[2]}arr[2]=$t
fi                                      #判断arr[0] arr[1]
if [ ${arr[0]} -gt ${arr[1]} ]
thent=${arr[0]}arr[0]=${arr[1]}arr[1]=$t
fi
echo ${arr[*]}
        【3】字符串
1.判断字符串长度不为0-n STRINGthe length of STRING is nonzeroSTRING equivalent to -n STRING判断str不为空if [ -n "$str" ]
2.判断字符串长度为0-z STRINGthe length of STRING is zero判断str为空if [ -z "$str" ]      
3.判断两个字符串是否相等STRING1 = STRING2the strings are equal判断字符串ab是否相等if [ $a = $b ]              
4.判断两个字符串不相等STRING1 != STRING2the strings are not equal判断字符串ab不相等if [ $a != $b ]     
5.判断字符串的大小关系if [ $a > $b ]    if [ $a < $b ]   练习:输入两个字符串,如果有一个为空则提示空,否则判断= >  <
read a
read b
if [ -z "$a" -o -z "$b" ]
thenecho NULL
elseif [ $a "=" $b ]thenecho  "="elif [ $a ">" $b ]            thenecho ">"elif [ $a "<" $b ]thenecho "<"fi
fi
        【4】文件

                文件类型:bcd-lsp

                参数: bcdfLSp

1.判断两个文件谁跟新(修改的时间)FILE1 -nt FILE2FILE1 is newer (modification date) than FILE2两个文件file1  file2if [ $file1 -nt $file2 ]     2.判断文件谁跟旧            FILE1 -ot FILE2FILE1 is older than FILE2两个文件file1  file2if [ $file1 -ot $file2 ]  3. 判断是否是块设备文件以及存在        -b FILEFILE exists and is block special文件file是否是块设备文件if [ -b $file ]    
4. 判断文件存在且是一个字符设备文件    -c FILEFILE exists and is character specialif [ -c $file ] 
5.判断文件存在且是一个目录               -d FILEFILE exists and is a directory6.判断文件是否存在-e FILEFILE exists
7.判断文件存在且是一个普通文件-f FILEFILE exists and is a regular file
8.判断文件存在且是一个链接文件         -h FILEFILE exists and is a symbolic link (same as -L)-L FILEFILE exists and is a symbolic link (same as -h)9.判断文件存在且是一个管道文件-p FILEFILE exists and is a named pipe
10.判断文件存在且文件大小大于0,文件不为空         -s FILEFILE exists and has a size greater than zero
11.判断文件存在且是一个套接字文件-S FILEFILE exists and is a socket12.判断文件存在且具备可读权限-r FILEFILE exists and read permission is granted
13.判断文件存在且具备写权限         -w FILEFILE exists and write permission is granted
14.判断文件存在且具备可执行权限         -x FILEFILE exists and execute (or search) permission is granted练习:终端输入文件名,输出文件对应的类型以及对应的权限

  1.4 case ..in

---------------C语言switch----
switch(表达式)
{case 常量表达式1:C语句; break;case 常量表达式2:C语句; break;case 常量表达式3:C语句; break;...default:C语句n;break;
}
----------------case..in--------
格式:
case varName in常量表达式1)shell语句;;        常量表达式2)shell语句;;            ------》不可以省略....*)shell语句;;            ----》可以省略不写                                                     esac    解析:1.varName:只是一个变量  类似switch中的表达式     2.常量表达式:2.1常见格式:hello)'hello')"hello") 2.2可以和按位或链接A|a)    --->A或a则执行Y|y|yes|YES) 2.3可以和通配符结合使用h*)  ?[]   70-89B[7-8][0-9])3.;; --->类似C语言break,退出case..in,  可有可无  4.*) 类似default  执行除上面案例的所有情况 练习:输入一个表达式,输出对应的值  +-*%       1+2       ---》3   a=1b=+c=2switch(b){case '+':printf("%d",a+b);break;case '-':printf("%d",a+b);break; case '*':printf("%d",a+b);break; case '/':printf("%d",a+b);break;case '%':printf("%d",a+b);break;default:error;break;}read a b c
case $b in+)echo $a$b$c=$((a+c));;-)echo $a$b$c=$((a-c));;"*")echo $a$b$c=$((a*c));;/)                       echo $a$b$c=$((a/c));;%)echo $a$b$c=$((a%c));;*)echo input error;;esac

二、shell循环结构

        1.回顾C语言的循环:while\ for\ do..while

        2.shell的循环: while\for\select..in

  2.1 while

------------------C语言----
while(表达式)
{C语句
}
------------------shell循环格式----
格式#while test 表达式while [ 表达式 ]         --->while [ 1 ]  死循环doshell语句done
执行流程:如果表达式为真则进入循环,表达式为假则退出循环练习:循环1--5      i=1while [ $i -le 5 ]doecho i=$i((i++))done练习:输入一个数组,使用while循环输出数组元素,计算数组元素的和
read -p "please enter arr:" -a arr
i=0
while [ $i -lt ${#arr[*]} ] 
doecho arr[$i]=${arr[$i]}  ((sum+=arr[i]))((i++))
done
echo sum=$sum        

  11.2 for

        while:属于当型循环,先判断后执行,最少执行0次,属于有条件控制(不清楚循环次数)

        for: 属于当型循环,先判断后执行,最少执行0次,属于计数控制(循环次数明确)

        do..while:属于直到型循环,先执行后判断,最少执行1次,属于条件控制(循环次数不明确)

---------------------C语言for循环格式----
for(表达式1;表达式2;表达式3)
{C语句
}
表达式1:起始值
表达式2:循环条件
表达式3:步长
-------------------shell的格式--------
格式1:类似于C语言的格式for ((表达式1;表达式2;表达式3))doshell语句done
执行流程:先表达式1,执行表达式2,如果表达式2为真则继续循环,后执行表达式3,如果表达式2为假
则结束循环
格式2:可以实现稀疏数组的循环for varName in 选项列表doshell语句done
格式3:for varName     -----》doshell语句done注意:"in 选项列表"如果不写,则默认varName的结果是终端输入的字符串也就是命令置换$1 $2 $3...
解析:
1.varName: 循环变量,类似i
2.选项列表:每个元素之间使用空格隔开2.1 选项列表为固定的字符换for i in 1 2 3 4doecho $idone2.2 选项列表的值为数组arr=(11 22 33)for i in ${arr[*]}doecho $idone2.3 选项列表可以使用seq指令格式:seq 起始值 间隔 终止值eg: seq 1 2 10   ----->1 3 5 7 9使用: `seq 起始值 间隔 终止值`      $(seq 起始值 间隔 终止值)   for i in `seq 2 2 8`   a=2 b=8for i in `seq $a 2 $b` 2.4 选项列表可以使用{1..3},起始值和终止值必须是常量{1..3} --->1 2 3           
3.执行流程:依次把选项列表的每个元素赋值给变量varName,如果选项列表的元素赋值结束,则结束循环练习:输入一个数组,计算最大值,使用for实现
练习: 打印图片**********for((i=1;i<=4;i++))
dofor((j=1;j<=i;j++))doecho -n "*" #取消换行打印doneecho   #换行
doneread -p "please enter arr:" -a arr
max=${arr[0]}
for var in ${arr[*]}
doif [ $max -lt $var ]thenmax=$varfi
done
echo max=$max

  2.3 select..in

        select..in: 增强和终端页面的交互性

格式:select varName in 选项列表doshell语句done
解析:
1.varName和选项列表:  与for循环一样
2.select..in执行流程:在#?的后面输入指定序列,如果序列号存在,则把指定对应的元素赋值给varName如果#?不输入世界回车,则重新打印页面,如果在#?的后面输入的值不在列表中,则重新输入ctrl c\  ctrl d结束循环
eg:
select var in 11 22 33 44
doecho var=$var
done                      

  2.4 select..in和case..in结合使用

练习:使用select..in和case..in实现计算器1)+2)-3)*4)/5)%#?
read a  c   #1  2
select b in + - "*" / %
docase $b in                       +)echo $a$b$c=$((a+c));;-)echo $a$b$c=$((a-c));;"*")echo $a$b$c=$((a*c));;/)                       echo $a$b$c=$((a/c));;%)echo $a$b$c=$((a%c));;*)echo input error;;esacdone

三、练习:

  3.1 使用case..in实现等级判断,输入一个成绩,判断等级

#!/bin/bashread grade
case $grade in9[0-9]|100)echo A;;8[0-9])echo B;;7[0-9])echo C;;6[0-9])echo D;;[1-5][0-9]|[0-9])echo 不及格;;*)echo error;;
esac

  3.2任意输入一个数,使用while循环计算各个位数字之和

#!/bin/bashread -p "请输入一个数:" num
sum=0
n=$num
while [ $num -gt 0 ]
dosum=$((num%10+$sum))num=$((num/10))
done
echo $n各个位数和为$sum

  3.3 输入一个字符串,使用while循环实现字符串逆置

#!/bin/bashread str
len=${#str}
echo str=$str
for i in `seq 1 1 $len`
doNewStr=$NewStr${str:0-i:1}
done
echo 逆置后:str=$NewStr

  3.4循环家目录下的所有内容,计算家目录下 目录的个数,普通文件的个数,使用for循环

#!/bin/basharr=(`ls ~`)
len=${#arr[*]}
qt=0
for i in `seq 0 1 $(($len-1))`
doif [ -d ~/${arr[$i]} ]then((qt++))fi
done
echo 家目录下目录数量为$qt
qt=0
for i in `seq 0 1 $(($len-1))`
doif [ -f ~/${arr[$i]} ]then((qt++))fi
done
echo 家目录下普通文件数量为$qt

  3.5 打印图形

        *

        ***

        *****

        *******

#!/bin/bashfor i in {1..4}
dofor ((j=4-i;j>0;j--))doecho -n " "donefor ((k=2*i-1;k>0;k--))doecho -n "*"doneecho 
done

  3.6 输入一个数组,请实现冒泡排序

#!/bin/bashread -p "请输入数组元素:" -a arr
len=${#arr[*]}
for i in `seq 1 1 $len`
dofor j in `seq 0 1 $(($len-$i-1))`doif [ ${arr[$j]} -gt ${arr[$((j+1))]} ]thentemp=${arr[$j]}arr[j]=${arr[$((j+1))]}arr[$((j+1))]=$tempfidone
doneecho ${arr[*]}

  3.7 输入一个数组,请实现插入排序

#!/bin/bashread -a arr -p "请输入数组中的元素:"
len=${#arr[*]}
sun=0
for i in `seq 1 1 $(($len-1))`
dotemp=${arr[$i]}for ((j=i-1;j>=0;j--))doif [ $temp -le ${arr[$j]} ]thenarr[$((j+1))]=${arr[$j]}elsearr[$((j+1))]=$tempj=-1fidone
done
echo ${arr[*]}

  3.8 输入用户名和密码(加密输入),实现密码的三次登录 默认用户名admin 密码1234 账户存款10000

如果登录失败,则提示

第1次登录失败,还有2次机会

第2次登录失败,还有1次机会

第3次登录失败,账户被锁定

如果登录成功,则显示银行页面

1.账户余额

2.取款

3.存款

如果选择1,则打印当前的余额

如果选择2,则输入取款金额,如果取款金额大于实际金额,则提示账户余额不足,请重新输入,如果账户余额小于等于实际金额,则提示取款成功,打印剩余金额

如果选择3,则输入存款金额,并提示 存款成功,余额的值

#!/bin/bashcount=1
balance=10000
while [ $count -le 3 ]
doread -p "请输入用户名:" nameread -p "请输入密码:" -s passwdif [ $name=="admin" -a $passwd=="1234" ]thenechoselect choice in 账户余额 取款 存款docase $choice in账户余额)echo 账户余额:$balance;;取款)read -p "请输入取款金额:" mountif [ $mount -gt $balance ]thenecho 余额不足,请重新输入elsebalance=$((balance-mount))echo 取款成功echo 账户余额:$balancefi;;存款)read -p "请输入存款金额:" mountbalance=$((balance+mount))echo 存款成功echo 账户余额:$balance;;*)echo error;;esacdoneelif [ $name!="admin" || $passwd!="1234" ]thenif [ $count -eq 3 ]thenecho 第$count次登录失败,账户被锁定elseecho "第$count次登录失败,还有$((3-$count))次机会"fi((count++))fi
done

相关文章:

C高级——shell(3)

一、shell的选择结构 1.回顾&#xff1a;C语言的选择结构:if , if else if ,if else,switch &#xff08;switch的执行速度最快&#xff09; 2.shell的选择结构&#xff1a; 单分支if 双分支 if else 多分支if elif case..in 1.1 shell的选择结构的格式 --------C语言的格式--…...

【C语言】第八期——指针、二维数组与字符串

目录 1 初始指针 2 获取变量的地址 3 定义指针变量、取地址、取值 3.1 定义指针变量 3.2 取地址、取值 4 对指针变量进行读写操作 5 指针变量作为函数参数 6 数组与指针 6.1 指针元素指向数组 6.2 指针加减运算&#xff08;了解&#xff09; 6.2.1 指针加减具体数字…...

docker 运行claude 的computer use

需要注意的是&#xff1a;这里claude操纵的是docker的虚拟服务器&#xff0c;不能访问本地url&#xff0c;需要进行端口转发 export ANTHROPIC_API_KEY%your_api_key% docker run \-e ANTHROPIC_API_KEY$ANTHROPIC_API_KEY \-v $HOME/.anthropic:/home/computeruse/.anthropi…...

JAVA面试_进阶部分_23种设计模式总结

1. 单例模式&#xff1a;确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这 个实例。 &#xff08;1&#xff09;懒汉式 public class Singleton { /* 持有私有静态实例&#xff0c;防止被引用&#xff0c;此处赋值为null&#xff0c;目的是实现延迟加载…...

边缘计算收益低的三大指标

边缘计算收益低的三大指标主要包括以下方面&#xff1a; 1. 资源贡献不足&#xff1a; 边缘计算的收益通常基于所提供的带宽、存储和计算资源来计算。如果设备的网络带宽有限、在线时间短或提供的存储容量较小&#xff0c;可能无法满足平台设定的最低贡献标准&#xff0c;从而导…...

Linux网络之传输层协议(UDP,TCP协议)

目录 重新认识端口号 端口号划分 netstat pidof UDP协议 UDP的特点 面向数据报 UDP的缓冲区 全双工和半双工 TCP协议 TCP的特点 TCP报头分析 源端口&#xff0c;目标端口&#xff0c;数据偏移(报文首部长度) 序号 确认号 窗口 6个标志位 ACK SYN …...

傅里叶分析

傅里叶分析之掐死教程&#xff08;完整版&#xff09;更新于2014.06.06 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具&#xff0c;更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是&#xff0c;傅里叶分析的公式看起来太复…...

【前端基础】Day 3 CSS-2

目录 1. Emmet语法 1.1 快速生成HTML结构语法 1.2 快速生成CSS样式语法 2. CSS的复合选择器 2.1 后代选择器 2.2 子选择器 2.3 并集选择器 2.4 伪类选择器 2.4.1 链接伪类选择器 2.4.2 focus伪类选择器 2.5 复合选择器总结 3. CSS的元素显示模式 3.1 什么是元素显示…...

NAT 技术:网络中的 “地址魔术师”

目录 一、性能瓶颈&#xff1a;NAT 的 “阿喀琉斯之踵” &#xff08;一&#xff09;数据包处理延迟 &#xff08;二&#xff09;高并发下的性能损耗 二、应用兼容性&#xff1a;NAT 带来的 “适配难题” &#xff08;一&#xff09;端到端通信的困境 &#xff08;二&…...

Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)

目录 1️⃣下载和安装Ollama 1. &#x1f947;官网下载安装包 2. &#x1f948;安装Ollama 3.&#x1f949;配置Ollama环境变量 4、&#x1f389;验证Ollama 2️⃣本地部署DeepSeek 1. 选择模型并下载 2. 验证和使用DeepSeek 3️⃣使用可视化工具 1. Chrome插件-Page …...

【JavaSE-1】初识Java

1、Java 是什么? Java 是一种优秀的程序设计语言,人类和计算机之间的交流可以借助 Java 这种语言来进行交流,就像人与人之间可以用中文、英语,日语等进行交流一样。 Java 和 JavaScript 两者有关系吗? 一点都没有关系!!! 前端内容:HTML CSS JS,称为网页三剑客 2、JDK 下…...

《基于Django和ElasticSearch的学术论文搜索推荐系统的设计与实现》开题报告

目录 一、选题的背景和意义 &#xff08;一&#xff09;选题背景 &#xff08;二&#xff09;选题意义 2.1.提升科研效率 2.2 促进学术创新 2.3优化资源配置 二、选题的国内外现状与总结 &#xff08;一&#xff09;国内现状 &#xff08;二&#xff09;国外现状 &am…...

Dify在Ubuntu20.04系统的部署

文章目录 一、dify 介绍1.核心功能优势2.应用场景 二、dify 安装(docker方式)1.代码库下载2.配置文件修改3.启动docker 容器 三、遇到问题与解决1.使用sudo docker compose up -d报错2.使用service docker start报错 一、dify 介绍 Dify 是一款开源的大语言模型&#xff08;LL…...

第7天:结构体与联合体 - 复杂数据类型

第7天&#xff1a;结构体与联合体 - 复杂数据类型 一、&#x1f4da; 今日学习目标 &#x1f3af; 掌握结构体&#xff08;struct&#xff09;的定义与使用&#x1f527; 理解联合体&#xff08;union&#xff09;的特性与适用场景&#x1f4a1; 完成图书馆管理系统实战&…...

vue富文本 vue-quill-editor + 上传图片到阿里云服务器 + 修改富文本内容

前言 使用富文本编辑器&#xff0c;需要将图片上传到服务器&#xff0c;完成之后&#xff0c;还需要在修改页面完成修改富文本内容&#xff0c;使用的富文本插件是vue-quill-editor, 一 、安装 vue-quill-editor npm i vue-quill-editor npm install quill --save npm inst…...

Java常见设计模式(中):结构型模式

&#x1f308; 引言&#xff1a;设计模式就像乐高积木 适配器&#xff1a;让不同形状的积木完美拼接装饰器&#xff1a;给积木添加炫酷灯光效果代理&#xff1a;遥控积木完成复杂动作组合&#xff1a;将小积木搭建成宏伟城堡 结构型模式 主要用于描述对象之间的关系&#xff…...

DeepSeek R1 + 飞书机器人实现AI智能助手

效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1&#xff0c;项目为sanic和redis实现&#xff0c;利用httpx异步处理流式响应&#xff0c;同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...

【论文详解】Transformer 论文《Attention Is All You Need》能够并行计算的原因

文章目录 前言一、传统 RNN/CNN 存在的串行计算问题二、Transformer 如何实现并行计算&#xff1f;三、Transformer 的 Encoder 和 Decoder 如何并行四、结论 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加关注哦&#xff…...

51c嵌入式~电路~合集12

我自己的原文哦~ https://blog.51cto.com/whaosoft/12318429 一、单端、推挽、桥式拓扑结构变压器对比 单端正激式 单端&#xff1a;通过一只开关器件单向驱动脉冲变压器。 正激&#xff1a;脉冲变压器的原/付边相位关系&#xff0c;确保在开关管导通&#xff0c;驱动脉冲…...

php 获取head参数

php 获取head参数 在PHP中&#xff0c;获取HTTP头部&#xff08;head&#xff09;参数可以通过不同的方式实现&#xff0c;下面为你详细介绍几种常见的方法。 1. 使用$_SERVER超全局变量 $_SERVER 是PHP中的一个超全局变量&#xff0c;它包含了诸如头信息、路径、脚本位置等…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...