shell基础+强化

2023-11-15

shell脚本

一、shell介绍

  • 什么是shell
  • shell功能

1.什么是shell

shell是一个程序,采用C语言编写,是用户和Linux内核沟通的桥梁。它既是一种命令语言,又是一种解释性的编程语言。通过一个图标来查看以下设立了的作用

img

扩展知识

kernel(内核):为软件服务,接收用户或软件指令驱动硬件,完成工作;

shell:命令解释器

user:用户接口,对接用户

从上图可以看出,shell在操作系统中起到了承接用户和系统内核的作用。那为什么步直接用户对内核呢?

原因很简单,因为内核处理的都是二进制,而用户处理的都是高级语言。简而言之,如果没有shell,你希望告诉你喜欢的妹子:我爱你。你需要经过以下步骤:

  1. 将“我爱你”翻译成二进制
  2. 告诉内核
  3. 内核通过网卡发送给你的妹子
  4. 妹子计算机网卡收到你发的二进制
  5. 网卡交给内核
  6. 内核交给妹子
  7. 妹子看到都是一串01组成的数字,o my god,二进制不是人人都懂的,你的表白也就石沉大海了。

为了让所有人都能够快速、方便地使用计算机,我们打的系统开发人员通过shell解决了这个问题。使任何一个希望通过计算机来工作、娱乐的人都能够快速操作计算机。

2. shell功能

  • 命令行解释功能
  • 启动程序
  • 输入输出重定向
  • 管道连接
  • 文件名置换(echo /*)
  • 变量维护
  • 环境控制
  • shell编程

二、shell语法

  • 如何书写一个shell脚本
  • shell脚本运行
  • shell中的特殊符号
  • 管道
  • 重定向
  • shell中数学运算
  • 脚本退出

**shell脚本就是将完成一个任务的所有命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。

1.如何书写一个shell脚本

shell脚本的命名:

名字要有意义,最好不要用a、b、c、d、1、2、3、4这中方式命名;虽然在linux系统中,文件没有扩展名的概念,依然建议你用.sh结尾;名字不要太长,最好能在30个字节以内解决。例如check_memory.sh

shell脚本格式:

shell脚本开头必须指定脚本运行环境,以#!这个特殊符号组合了组成。如: #!/bin/bash 指定该脚本是运行解析由/bin/bash来完成的:

shell中的注释使用#

shell脚本中,最好加入脚本说明字段
#!/bin/bash
#Author: xxx
#Created Time: xxxx/xx/xx xx:xx
#Release:1.0
#Script Description: first shell study script

2.如何运行一个shell脚本

脚本运行需要执行权限,当我们给一个文件赋予执行权限后,该脚本就可以运行

chmod u+x filename

如果不希望赋予脚本执行权限,那么可以使用bash命令来运行未给予执行权限的脚本

bash filename

3. shell中的特殊符号

符号 描述
~ 家目录 # cd ~ 代表进入用户家目录
! 执行历史命令 ~~执行上一条命令
$ 变量中取内容符
+ – * / % 对应数学运算 加 减 乘 除 取余
& 后台执行
* 型号是shell中的通配符,匹配所有
? 问号是shell中的通配符,匹配除回车以外的一个字符
; 分号可以在shell中一行执行多个命令,命令hi加用分号分隔
| 管道符,上一个命令的输出作为下一个命令的输入 cat filename | grep “abc”
\ 转义字符
`` 反引号 命令中执行命令 echo “today is /date +%F/
‘ ‘ 单引号,脚本中字符串要用单引号引起来,但不同于双引号的是,单引号不解释变量
” “ 双引号,脚本中出现的字符串可以用双引号引起来

4. shell中管道的运用

| 管道符在shell中使用是最多的,很多组合命令都需要通过组合命令来完成输出。管道符其实就是下一个命令对上一个命令的输出做处理。

5. shell重定向

  1. > 重定向输入 覆盖原数据
  2. >> 重定向追加输入,在原数据的末尾添加
  3. < 重定向输出 wc -l < /etc/passwd
  4. << 重定向追加输出 fdisk /dev/sdb <

6. shell数学运算

expr 命令:只能做整数运算,格式比较古板,注意空格

expr 1 + 1
expr 5 - 2
expr 5 \* 2
expr 5 / 2
expr 5 % 2

使用bc计算器处理浮点运算,sacle=2代表小数点保留两位

echo "scale=2;3+100"|bc
echo "scale=2;100-3"|bc
echo "scale=2;100/3"|bc
echo "scale=2;100*3"|bc

双小圆括号运算,在shell中(())也可以用来做数学运算

echo $(( 100+3))
echo $(( 100-3)) 
echo $(( 100%3))
echo $(( 100*3))
echo $(( 100/3))
echo $(( 100**3))        //开方运算    

7.退出脚本

exit NUM:退出脚本,释放系统资源,NUM代表一个整数,代表返回值。

三、shell格式化输出

  • echo命令
  • 颜色输出

一个程序需要有0个或以上输入,一个或更多输出

1. echo命令介绍

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。 该命令的一般格式为:echo [ -n ]字符串

其中选项n表示输出文字后不换行;字符串能加引号,也能不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。

功能说明:显示文字。

语法:

echo [-ne][字符串]    
echo [--help][--version] 

补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开,并在最后加上换行号。

命令选项:

-n:不要在最后自动换行;

-e:若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

转义字符:

转义字符 描述
\a 发出警告声
\b 删除前一个字符
\c 最后不加上换行符号
\f 换行但光标仍旧停留在原来的位置
\n 换行且光标移至行首
\r 光标移至行首,但不换行
\t 插入tab
\v 与\f相同
\ 插入\字符
\nnn 插入nnn(八进制)所代表的ASCII字符

举例:输出一个菜单

#!/bin/bash
 
echo -e "\t\t\t\tFruit Shop"
echo -e "\t1) Apple"
echo -e "\t2) Orange"
echo -e "\t3) Banana"

输出

                Fruit Shop
    1) Apple
    2) Orange
    3) Banana

2.颜色代码

脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e

格式如下:

echo -e “\033[字背景颜色;文字颜色m字符串\033[0m”

例如:

echo -e “\033[41;36m something here \033[0m”
  1. 字背景颜色和文字颜色之间是英文的””
  2. 文字颜色后面有个m
  3. 字符串前后可以没有空格,如果有的话,输出也是同样有空格
下面是相应的字和背景颜色,可以自己来尝试找出不同颜色搭配
  例
  echo -e “\033[31m 红色字 \033[0m”
  echo -e “\033[34m 黄色字 \033[0m”
  echo -e “\033[41;33m 红底黄字 \033[0m”
  echo -e “\033[41;37m 红底白字 \033[0m”
  
字颜色:30—–37
  echo -e “\033[30m 黑色字 \033[0m”
  echo -e “\033[31m 红色字 \033[0m”
  echo -e “\033[32m 绿色字 \033[0m”
  echo -e “\033[33m 黄色字 \033[0m”
  echo -e “\033[34m 蓝色字 \033[0m”
  echo -e “\033[35m 紫色字 \033[0m”
  echo -e “\033[36m 天蓝字 \033[0m”
  echo -e “\033[37m 白色字 \033[0m”
  
字背景颜色范围:40—–47
  echo -e “\033[40;37m 黑底白字 \033[0m”
  echo -e “\033[41;37m 红底白字 \033[0m”
  echo -e “\033[42;37m 绿底白字 \033[0m”
  echo -e “\033[43;37m 黄底白字 \033[0m”
  echo -e “\033[44;37m 蓝底白字 \033[0m”
  echo -e “\033[45;37m 紫底白字 \033[0m”
  echo -e “\033[46;37m 天蓝底白字 \033[0m”
  echo -e “\033[47;30m 白底黑字 \033[0m”
  
最后面控制选项说明
  \033[0m 关闭所有属性
  \033[1m 设置高亮度
  \033[4m 下划线
  \033[5m 闪烁
  \033[7m 反显
  \033[8m 消隐
  \033[30m — \33[37m 
设置前景色
  \033[40m — \33[47m 设置背景色
  \033[nA 光标上移n行
  \033[nB 光标下移n行
  \033[nC 光标右移n行
  \033[nD 光标左移n行
  \033[y;xH设置光标位置
  \033[2J 清屏
  \033[K 清除从光标到行尾的内容
  \33[s 保存光标位置
  \033[u 恢复光标位置
  \033[?25l 隐藏光标
  \033[?25h 显示光标

四、shell基本输入

  • read命令

1. read命令

默认接受键盘的输入,回车符代表输入结束

read 命令选项 描述
-p 打印信息
-t 限定时间
-s 不回显
-n 输入字符个数

五、shell变量

  • 变量介绍
  • 变量分类
  • 变量管理

1.变量介绍

  1. 在编程中,我们总有一些数据需要临时存放在内存,以待后续使用时快速读出。内存在系统启动的时候被按照1B一个单位划分为若干个块,然后统一
  2. 编号(16进制编号),并对内存的使用情况做记录,保存在内存跟踪表中。

变量:变量是编程中最常用的一种临时在内存中存取数据的一种方式。

img

从图片可以看出,当我们在脚本中定义变量存值的时候,可以从以下方面看到变化:

  1. 内存占用:如果存的是一个字符则占用1个字节,如果存的是字符串则是字符串的长度加1个字节长度(\0是一个特殊字符,代表字符串结束)。
  2. 变量名与内存空间关系:计算机中会将对应的内存空间和变量名称绑定在一起,此时代表这段内存空间已经被程序占用,其他程序不可复用;然后将变量名对应的值存在对应内存地址的空间里。

2.变量分类

  1. 本地变量:用户私有变量,只有本用户可以使用,保存在家目录下的.bash_profile、.bashrc文件中
  2. 全局变量:所有用户都可以使用,保存在/etc/profile、/etc/bashrc文件中
  3. 用户自定义变量:用户自定义,比如脚本中的变量

3.定义变量

3.1定义变量

变量格式:变量名=值

在shell编程中的变量名和等号之间不能有空格

变量命名规则:

  1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  2. 中间不能有空格,可以使用下划线(_)。
  3. 不能使用标点符号。
  4. 不能使用bash里的关键字(可用help命令查看保留关键字)。
VAR1=1
 
age=18
 
name='baism'
 
score=88.8

注意:字符串要用单引号或双引号引起来

3.2读取变量内容

读取变量内容符:$

读取方法:$变量名

echo $name
echo $school
echo $age
echo $score
3.3取消变量unset
unset name
echo $name
3.4定义全局变量export
export name='Tom'

注意

  1. 上述设置的变量其实都是一次性变量,系统重启就会丢失。
  2. 如果希望本地变量或者全局变量可以永久使用,可以将需要设置的变量写入变量文件中即可。
3.5定义永久变量

本地变量:用户私有变量,只有本用户可以使用,保存在家目录下的.bash_profile、.bashrc文件中

全局变量:所有用户都可以使用,保存在/etc/profile、/etc/bashrc文件中

#本地变量
tail -1 ~/.bash_profile
name='baism'
 
#全局变量
tail -1 /etc/profile
export age=30

六、shell数组

  • 数组介绍
  • 基本数组
  • 关联数组
  • 案列分享

1.数组介绍

一个变量只能存一个值,但是现实中又又很多值需要存储,那么变量就有些拘谨了。比如做一个学员信息表,一个班50个人,每个人6条信息,我们需要定义300个变量才能完成。恐怖恐怖,这只是一个班的学生,一个学校呢?一个市呢?……我想静静了!

仔细想想上述的案例,一个学生六个信息:ID、姓名、性别、年龄、成绩、班级。可不可以定义六个变量就能存储这六类信息呢?答案是当然可以的!变量不行,我们就用数组。

2.基本数组

数组可以让用户一次赋予多个值,需要读取数据时只需通过索引调用就可以方便读出了。

2.1数组语法
数组名称=(元素1 元素2 元素3 ...)
2.2数组读出
${数组名称[索引]}

索引默认是元素在数组中的排队编号,默认第一个从0开始

2.3数组赋值

方法一:一次赋一个值

array0[0]='tom'
array0[1]='jarry'
array0[2]='natasha'

方法二: 一次赋多个值

array2=(tom jack alice)
array3=(cat /etc/passwd)     #希望是将该文件中的每一个行作为一个元素赋值给数组array3
array4=(ls /var/ftp/Shell/for*)
array5=(tom jack alice “bash shell”)
2.4查看数组
declare -a
declare -a array1='([0]=”pear” [1]=”apple” [2]=”orange” [3]=”peach”)'
declare -a array2='([0]=”tom” [1]=”jack” [2]=”alice”)'
2.5访问数组元素
echo ${array1[0]}         #访问数组中的第一个元素
echo ${array1[@]}         #访问数组中所有元素 等同于 echo ${array1[*]}
echo ${#array1[@]}         #统计数组元素的个数
echo ${!array2[@]}         #获取数组元素的索引
echo ${array1[@]:1}     #从数组下标1开始
echo ${array1[@]:1:2}     #从数组下标1开始,访问两个元素
2.6遍历数组

默认数组通过数组元素的个数进行遍历

echo ${ass_array2[index1]}
echo ${ass_array2[index2]}
echo ${ass_array2[index3]}
echo ${ass_array2[index4]}

方法二: 针对关联数组可以通过数组元素的索引进行遍历

3.关联数组

关联数组可以允许用户自定义数组的索引,这样使用起来更加方便、高效。

3.1定义关联数组

申明关联数组变量

declare -A ass_array1
declare -A ass_array2
3.2关联数组赋值

方法一: 一次赋一个值

数组名[索引]=变量值
ass_array1[index1]=pear
ass_array1[index2]=apple
ass_array1[index3]=orange
ass_array1[index4]=peach

方法二: 一次赋多个值

ass_array2=([index1]=tom [index2]=jack [index3]=alice [index4]=’bash shell’)
3.3查看数组
declare -A
declare -A ass_array1=([index4]=”peach” [index1]=”pear” [index2]=”apple” [index3]=”orange” )declare -A ass_array2=([index4]=”bash shell” [index1]=”tom” [index2]=”jack” [index3]=”alice” )
3.4访问数组元素
echo ${ass_array2[index2]}         #访问数组中的第二个元数
echo ${ass_array2[@]}             #访问数组中所有元数 等同于 echo ${array1[*]}
echo ${#ass_array2[@]}             #获得数组元数的个数
echo ${!ass_array2[@]}             #获得数组元数的索引
3.5遍历数组

通过数组元数的索引进行遍历,针对关联数组可以通过数组元素的索引进行遍历

echo ${ass_array2[index1]}
echo ${ass_array2[index2]}
echo ${ass_array2[index3]}
echo ${ass_array2[index4]}

4.案例分享——学员信息系统

#!/bin/bash
#Author:s1ng
#Date:2022/2/21
#Description:学员查询系统
for ((i=0;i<3;i++))
        do
                read -p "输入第$((i+1))个人名:" name[$i]
                read -p "输入第$((i+1))个年龄:" age[$i]
                read -p "输入第$((i+1))个性别:" gender[$i]
        done
clear
        echo -e "**********学员查询系统**********"
        echo -e "\033[41;36m 若要退出 输入:Q\033[0m"
while :
do
        cp=0
        read -p "输入要查询的姓名:" xm
        [ $xm == "Q" ]&&exit
        for ((i=0;i<3;i++))
        do
                if [ "$xm"  == "${name[$i]}" ];then
                        echo  "${name[$i]} ${age[$i]} ${gender[$i]}"
                        cp=1
                fi
        done
        [ $cp -eq 0 ]&&echo "not found student!"
done

七、shell流程控制-if判断语句

  • shell中的五大运算
  • if语法

当我们在写程序的时候,时常对上一步执行是否成功如何判断苦恼,当我们今天学习了if就可以解决你的苦恼。if语句在我们程序中就是用来做判断的,以后大家不管学习什么语言,以后只要涉及到判断的部分,大家就可以直接拿if来使用,不同的语言之间的if只是语法不同,原理是相同的。

1. shell中的运算

1.1数学比较运算

运算符解释:

运算符 描述
-eq 等于
-gt 大于
-lt 小于
-ge 大于或等于
-le 小于或等于
-ne 不等于
test 1 -eq 1;$?        #0(shell中0为真,1为假)
test 1 -lt 1;$?        #1  
1.2字符串比较运算

运算符解释,注意字符串一定别忘了使用引号引起来

运算符 描述
== 等于
!= 不等于
-n 检查字符串的长度是否大于0
-z 检查字符串的长度是否为0
test 'abc' -n
1.3文件比较与检查
运算符 描述
-d 检查文件是否存在且为目录
-e 检查文件是否存在
-f 检查文件是否存在且为文件
-r 检查文件是否存在且可读
-s 检查文件是否存在且不为空
-w 检查文件是否存在且可写
-x 检查文件是否存在且可执行
-O 检查文件是否存在并且被当前用户拥有
-G 检查文件是否存在并且默认组为当前用户组
file1 -nt file2  检查file1是否比file2新
file1 -ot file2  检查file1是否比file2旧
file1 -ef file2  检查file1是否与file2是同一个文件
test -d /opt/shell;echo $?        #0
test -e /opt/shell/shell_05.sh;echo $?        #0
1.4逻辑运算
运算符 描述
&& 逻辑与运算
|| 逻辑或运算
逻辑非运算
if [ 1 -eq 1 ] && [ 2 -eq 2 ];then echo "yes";else echo "no";fi        #yes

逻辑运算注意事项:逻辑与 或 运算都需要两个或以上条件,逻辑非运算只能一个条件。

1.5赋值运算

=:赋值运算符

a=10   
name='baism'

2. if语法

2.1语法一:单if语句

适用范围:只需要一步判断,条件返回真干什么或者条件返回假干什么。

语句格式

if [ condition ]           #condition 值为true or false
   then
      commands
fi

判断当前用户是不是root,如果不是那么返回”ERROR: need to be root so that!“

#!/bin/bash
 
if[ $USER != 'root' ]
    then
        echo "ERROR:need to be so that"
        exit 1
fi
2.2语法二:if-then-else语句

适用范围:两步判断,条件为真干什么,条件为假干什么。

if [ condition ]
     then
          commands1
else
          commands2
fi

判断当前登录用户是管理员还是普通用户,如果是管理员输出”hey admin“ 如果是普通用户输出”hey guest“

if [ $USER == 'root' ]
    then 
        echo "hey admin"
else 
        echo "hey guest"
fi
2.3语法三:if-then-elif语句

适用范围:多于两个以上的判断结果,也就是多于一个以上的判断条件。

if [ condition 1]
     then
            commands1
elif [ condition 2]
     then
             commands2
  .......
else
            commandsX
fi

通过一个脚本,判断两个整数的关系。

if [ $1 -gt $2 ]
    then
        echo "$1 > $2"
elif [ $1 -eq $2 ]
    then
        echo "$1 = $2"
else
        echo "$1 < $2"
fi

3. if高级应用

  1. 条件符号使用双圆括号,可以在条件中植入数学表达式
if (( 100%3+1>1 ));then
    echo "yes"
else
    echo "no"
fi

注意 双小圆括号中的比较运算符 使用的是我们传统的比较运算符 >>= == <<= !=

​ 2.使用双方括号,可以在条件中使用通配符

为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串

#!/bin/bash
for i in r1 rr2 cc rr3
    do
        if [[ $i == r* ]];then
            echo $i
        fi
done

为字符串提供高级功能,模式匹配 r* 匹配r开头的字符串

八、shell流程控制-for循环语句

  • for循环介绍
  • for语法
  • 循环控制

脚本在执行任务的时候,总会遇到需要循环执行的时候,比如说我们需要脚本每隔五分钟执行一次ping的操作,除了计划任务,我们还可以使用脚本来完成,那么我们就用到了循环语句。

1. for 循环介绍

很多人把for循环叫做条件循环,或者for i in 。其实前者说的就是for的特性,for循环的次数和给予的条件是成正比的,也就是你给5个条件,那么他就循环5次;后者说的是for的语法。

循环的优点:

  1. 节省内存(完成同一个任务)
  2. 结构更清晰
  3. 节省时间成本

2. for语法

2.1 for 语法一
for var in value1 value2 ......
    do
        commands
done

循环输出1-9数字

#!/bin/bash
for i in `seq 1 9`        #seq 1 9 是从1数到9
    do
        echo $i
done
2.2 for语法二

C式的for命令

for ((变量;条件;自增减运算  ))
   do
          代码块
done

输出1-9

#!/bin/bash
for (( i=1;i<10;i++ ))
    do
        echo $i
done

for循环使用多个变量

#!/bin/bash
for (( a=0,b=9;a<10;a++,b-- ))
    do
        echo $a,$b
done

for 无限循环 使用((;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell基础+强化 的相关文章

随机推荐

  • 百人对谈

    他从事 NET技术开发二十余年 连续18年荣获微软最有价值专家 MVP 他积极参与运营 NET技术社区 Dapr中文社区及开源项目 在社区被广大开发者们称为 张队 他不断刷新自我 技术领域拓展至云计算和人工智能 荣获5届华为云开发者专家 H
  • 用Tensorflow重现YOLO V4

    如果对Tensorflow实现最新的Yolo v7算法有兴趣的朋友 可以参见我最新发布的文章 Yolo v7的最简TensorFlow实现 gzroy的博客 CSDN博客 YOLO是一个非常出名的目标检测的模型 兼具精度和性能 在工业界的应
  • Virtual-Box Ubuntu 16.04 你应该这样来安装Chrome google 浏览器

    最近写一个项目需要用到ruby来进行开发 但是作为一个只能在windows pc 上来开发的程序员来说 固然需要在windows上做一堆的配置 已经把我搞的疯掉了 没钱买mac就只能VirtualBox上搭一个ubuntu来进行开发了 这里
  • Python多版本管理工具-pyenv相关总结

    由于需要进行MAC下多Python管理 看了很多相关文章 这是自己的理解的相关总结 包括最重要的pyenv 和 virtualenv anaconda有什么区别 文章目录 Python多版本管理工具 pyenv pyenv介绍 pyenv安
  • (2022)安卓和苹果应用注册上架概述

    目录 一 点击目录跳转对应文章 一 华为开发者申请及上架 二 小米开发者申请及上架 三 应用宝开发者申请及上架 四 OPPO开发者申请及上架 五 VIVO开发者申请及上架 六 苹果开发者申请及上架 开始前的准备工作 1 注册前先准备一个邮箱
  • 数据结构刷题:第十七天(基础)

    目录 一 杨辉三角 二 旋转图像 看题解 三 螺旋矩阵 一 杨辉三角 119 杨辉三角 II 力扣 LeetCode https leetcode cn problems pascals triangle ii plan data stru
  • python爬虫:抓取页面上的超链接

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库 它能够通过你喜欢的转换器实现惯用的文档导航 查找 修改文档的方式 Beautiful Soup会帮你节省数小时甚至数天的工作时间 页面上的超链接 在H
  • Tangram 2.0 VirtualView Demo 配置

    天猫开源了一个动态UI的方案 包含 https github com alibaba VirtualView iOS https github com alibaba tangram ios 简单来个Demo 1 常规创建工程 配置podf
  • nohup 后台启动程序,并输出到指定日志

    1 启动程序并输入到指定日志 nohup python manage py runserver 0 0 0 0 9090 gt data zyj xadstat xadstat log 2 gt 1 或者 nohup python mana
  • 企培版edusoho对接第三方云视频点播 最新版本代码披露 支持m3u8视频加密

    edusoho企培系列版本更新日志 新增功能和优化历史 倍数播放功能 视频分类 支持m3u8视频加密 plugins AliVideoPlugin DependencyInjection Configuration php
  • 零基础入门网络安全,收藏这篇不迷茫【2023 最新】

    零基础入门网络安全 收藏这篇不迷茫 2023 最新 前言 最近收到不少关注朋友的私信和留言 大多数都是零基础小友入门网络安全 需要相关资源学习 其实看过的铁粉都知道 之前的文里是有过推荐过的 新来的小友可能不太清楚 这里就系统地叙述一遍 0
  • Qt connect的实现原理

    概述 connect实质上是将对象A的信号和对象B的槽函数进行连接 然后返回一个句柄Connection 正文 下面通过源码来解析一下 注意看中文注释 connection表示信号槽连接句柄 QMetaObject Connection Q
  • 15. 从0开始学ARM-位置无关码

    目录 十九 位置无关码 一 为什么需要位置无关码 1 exynos 4412启动流程 二 怎么实现位置无关码 1 什么是 编译地址 什么是 运行地址 2 举例 3 代码 四 总结 1 位置无关码 2 位置相关码 3 位置无关码的应用 4 结
  • 动态实体类方案1.0(虚拟实体类生成器)[万能实体]

    该工具能实现任何实体类的动态生成传入参数名称自动生成get set方法 供反射调用 该方法生成的实体类是在程序运行过程动态生成加载出来的 实际代码文件并不存在 所以我暂定他为虚拟实体类生成工具 本方法我自己暂时用在mybatis中当统一的传
  • DETR源码学习(三)之损失函数与后处理

    在DETR模型中 在完成DETR模型的构建后 我们送入数据在完成前向传播后就需要使用预测值与真实值进行计算损失来进行反向传播进而更新梯度 在DETR模型中 其标签匹配采用的是匈牙利匹配算法 主要涉及models matcher py mod
  • 调用百度API实现人脸识别

    人脸识别 听着很高级 但实际上它确实很高级 不过对于我们开发人员来说 我们大部分人都是拿来主义 这次展示的是调用百度人脸识别API进行人脸信息分析 笔者试了下 发现还是挺准确的 而且代码量很少才8行 用的python 如果用java铁定不止
  • js拼接字符串与变量

    使用eval 方法可将拼接后的字符串与变量转变为变量 var field test 我是小白鼠一号 var field test 我是小白鼠二号 然后在JS里尝试将前面的语言简写当成变量 拼接后面的字符串 var lang field va
  • 含泪整理最优质Fbx 3d模型素材,你想要的这里都有

    今天小编针对Fbx 3d模型素材为大家整理了很多内容哦 肯定有需要的小伙伴吧 实用 免费 优质的素材谁又不心动呢 赶紧码住 接下来就给大家介绍一下我珍藏已久的网站 我的工作灵感都是来源它哦 里面的Fbx 3d模型资源数量多 种类丰富 并且每
  • Ubuntu16.04搭建Fabric1.4环境

    一 换源 为了提高下载速度 将ubuntu的源改成国内的源 推荐阿里云源和清华源 apt源保存在 etc apt sources list 代表根目录 etc 这个文件夹几乎放置了系统的所有配置文件 1 备份 sudo cp etc apt
  • shell基础+强化

    shell脚本 一 shell介绍 什么是shell shell功能 1 什么是shell shell是一个程序 采用C语言编写 是用户和Linux内核沟通的桥梁 它既是一种命令语言 又是一种解释性的编程语言 通过一个图标来查看以下设立了的