操作系统强化认识之Shell编程学习与总结

news2024/10/7 20:26:37

目录

1.Shell的概述

2.Shell脚本入门

3.变量

3.1.系统预定义变量

3.2.自定义变量

3.3.特殊变量

4.运算符

5.条件判断

6.流程控制

6.1.if判断

6.2.case语句

6.3.for循环

6.4.while循环

7.read读取控制台输入

8.函数

8.1.系统函数

8.2.自定义函数

9.正则表示式入门

10.文本处理工具

10.1.cut

10.2.awk

11.综合应用案例

11.1.归档文件

11.2.发送消息


1.Shell的概述

Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核。

uTools_1690124669791

Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。

Linux的shell有多种,常见的有:

  1. Bash:Bash是Linux默认的Shell,也是最常见的Shell之一。

  2. Zsh:Zsh是一个功能强大的Shell,拥有很多特性,可以自动补全命令、支持主题、插件等。

  3. Ksh:Ksh是Unix系统默认的Shell,是一种比较流行的Shell。

  4. Dash:Dash是一种轻量级的Shell,可以在需要快速启动Shell时使用。

  5. Perl:Perl是一种脚本语言,也可以作为Shell使用。

Shell脚本是一个包含一些列命令序列的文本文件,当运行这个脚本文件时,文件中包含的命令序列得到执行。Shell可以将命令组合起来,形成一个复合命令,可以简化操作。

2.Shell脚本入门

1.脚本格式

脚本以#!/bin/bash开头(指定解释器)

2.第一个Shell脚本:helloworld.sh

  1. 需求:创建一个Shell脚本,输出helloworld

  2. 案例实操

首先创建脚本:

touch helloworld.sh
vim helloworld.sh

在写入内容:

#!/bin/bash
echo "hello world"
  1. 脚本的常用执行方式

第一种:采用bash或者sh+脚本的相对路径或者绝对路径(不用赋予脚本+x权限)

sh+脚本的相对路径

sh ./helloworld.sh

sh+脚本的绝对路径

sh /home/atguigu/shells/helloworld.sh

bash+脚本的相对路径

bash ./helloworld.sh

bash+脚本的绝对路径

bash /home/atguigu/shells/helloworld.sh

第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)

  1. 首先要赋予helloworld.sh脚本+x权限

chmod +x helloworld.sh
  1. 执行脚本

相对路径

./helloworld.sh

绝对路径

/home/atguigu/shells/helloworld.sh

第三种:在脚本路径前面加上"."或者source

cat test.sh
#!/bin/bash
A=5
echo $A
​
bash test.sh
echo $A
​
. test.sh
echo $A
​
source test.sh

我们可以查看source是用来干什么的:

type source

前两种方式都是在当前shell中打开的一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中。

第三种也就是在使用脚本路径前加上"."或者source的方式,可以使脚本内容在当前shell里执行,而无需打开子shell!这也是为什么我们每次要修改完/ettc/profile文件以后,需要source一下的原因。

开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。

3.变量

3.1.系统预定义变量

1)常用系统变量

$HOME

$PWD

$SHELL

$USER

2)实例操作

查看系统变量的值和显示当前shell中所有变量set

echo $HOME
set
BASH=/bin/bash
BASH_ALLASES=()
BASH_ARGC=()
BASH_ARGV=()

3.2.自定义变量

1)基础语法

定义变量:变量名=变量值,注意,=号前后不能有空格

撤销变量:unset 变量名

声明静态变量:readonly 变量,注意:不能unset

2)变量定义规则

变量名称可以由字母、数字、下划线组成,但是不能以数字开头,环境变量名建议大写。

等号两侧不能有空格

在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。

变量的值如果有空格,需要使用双引号或者单引号括起来。

3)案例实操

a=2
echo $a
b=$(1+5) # $()就会计算
unset a # 撤销a变量
readonly b=5 # 变为只读变量,无法修改b的值

注意不要在等号前后写入空格的形式。

子shell里的变量退出exit之后,对于父shell是没有任何影响和改变的。

echo $PATH

如果将我们的代码文件放置在PATH路径下,那么就可以直接运行helloworld.sh文件,无需在前面添加bash、"."路径等操作了。

# vim内
#!/bin/bash
echo "hello world"
echo "hello,$1" #$1作为一个变量
​
./hello.sh
./hello.sh xiaoming # 就会输出变量

3.3.特殊变量

1.$n

基本语法:$n

n为数字

$0代表该脚本名称

$ 1 ~ 9 代表第一个到第九个参数,10以上的参数需要用大括号包含

如${10}

touch parameter.sh
vim parameter.sh
#!/bin/bash
echo '--------$n--------'
echo $0
echo $1
echo $2
​
chomd 777 parameter.sh
./parameter.sh cls xz
--------$n--------
./parameter.sh
cls
xz

2.$#

获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性

touch parameter.sh
vim parameter.sh
echo '=========$n========='
echo $0
echo $1
echo $2
echo '=========$n========='
echo parameter numbers : $#
​
chomd 777 parameter.sh
./parameter.sh cls xz
=========$n=========
parameter.sh
cls
xz
echo '=========$n========='
parameter numbers : 2

3.$*

$@

$* 这个变量代表命令行中所有的参数,它把所有的参数看成一个整体

$@这个变量也代表命令行中所有的参数,不过它能把所有参数区分对待

vim parameter.sh
echo '=========$n========='
echo $0
echo $1
echo $2
echo '=========$n========='
echo parameter numbers : $#
echo '=========$n========='
echo $@
​
chomd 777 parameter.sh
./parameter.sh cls xz
=========$n=========
parameter.sh
cls
xz
echo '=========$n========='
parameter numbers : 2
=========$n=========
cls xz

4.$?

最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行:如果这个变量的值为非0(具体是哪个数,由命令行自己来解决),则证明上一个命令行执行不正确了。)

案例操作:

./helloworld.sh
echo $?
0

4.运算符

expr表达式

a=1+2
echo $a
1+2
​
expr 1+2
1+2
expr 1 + 3
4
expr 5 - 2
3
expr 5 * 2 # 会报错
expr: 语法错误
expr 5 \* 2 # 这才是正确的
10

$(运算式)

或者$[运算式]

S=$[(2+3)*4]
echo $S
20
​
a=$(expr 5 \* 2) # 等价替换
echo $a
10
a=`expr 5  \* 4`
echo $a
20

实验案例:

touch add.sh
vim add.sh
​
# vim下的代码编写
#!/bin/bash
sum=$[$1 + $2]
echo sum=$sum
​
# 保存退出以后运行
chmod +x add.sh
./add.sh 25 89
sum=114

5.条件判断

1.基本语法

  1. test condition

  2. [condition](注意condition前后要有空格0

注意:条件非空即为true,[atguigu]返回true,[ ]返回false

a=hello
echo $a
hello
test $a = hello
echo $?
0 # 证明a和hello是相等的
​
test $a = Hello
echo $?
1 # 说明a和hello是不相等的

[condition]

$a=Hello
[$a = Hello]
echo $?
0
​
[$a=hello]
echo $?
0 # 这说明没有空格就会导致值被替换
​
[$a = Hello]
echo $?
1
​
[$a = hello]
echo $?
0
​
[$a != hello]

2.常用判断条件

  1. 两个整数之间的比较

-eq等于(equal)

-ne不等于(not equal)

-lt小于(less than)

-le小于等于(less equal)

-gt大于(greater than)

-ge大于等于(greater equal)

注意:如果是字符串之间的比较,用等号"="判断相等;用"!="判断不相等

[2 -gt 9]
echo $?
1
  1. 按照文件权限进行判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

touch test
[ -r hello.sh]
echo $?
0
[ -w hello.sh]
echo $?
0
[ -x hello.sh]
echo $?
0
  1. 按照文件类型进行判断

-e 文件存在(existence)

-f 文件存在并且是一个常规的文件(file)

-d 文件存在并且是一个目录(directory)

[ -e /home/tang/desktop/tang.sh ]
echo $?
0
[ -f /home/tang/desktop/tang.sh ]
echo $?
0
[ -d /home/tang/desktop/tang.sh ]
echo $?
1
  1. 多逻辑判断

&& 表示前一条命令执行成功时,才执行后一条命令

|| 表示上一条命令执行失败后,才执行下一条命令

a=15
[ $a -lt 20 ] && echo "&a < 20" || echo "$a >= 20"
&a < 20

6.流程控制

6.1.if判断

单分支

if [ 条件判断式 ]; then
    程序
fi

或者

if [ 条件判断式 ]
then
    程序
fi

实验:

a=25
if [ $a -gt 10 ]; then echo Ok

多分支

if [ 条件判断式 ]
then
    程序
elif [ 条件判断式 ]
then
    程序
else
then
    程序
fi

实验:

vim if_test.sh
​
#!/bin/bash
​
if [ $1 = atguigu ]
then
        echo "welcome, atguigu"
fi
​
chmod +x if_test.sh
./if_test.sh xiaoming
./if_test.sh atguigu
welcome atguigu
​
a=15
if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK; fi
echo $a
15
​
a=25
if [ $a -gt 18 ] && [ $a -lt 35 ]; then echo OK; fi
OK
​
a=36
if [ $a -gt 18 ] && [ $a -lt 35]; then echo OK; fi
​
vim if_test.sh
​
#!/bin/bash
​
if [ $1 -lt 18 ]
then
        echo "未成年"
elif [ $1 -lt 35 ]
then
        echo "成年"
else
        echo "老年"
fi

6.2.case语句

case $变量 in
"值 1")
    如果变量值等于值1,则执行程序1
;;
"值 2")
    如果变量值等于值2,则执行程序2
;;
    __省略其他分支__
*)
    如果变量值都不是以上的值,则执行此程序
;;
esac

注意事项:

  1. case行尾必须为单词“in”,每一个模式匹配必须以有括号")"结束

  2. 双分号";;"表示命令序列结束,相当于java中的break

  3. 最后的"*)"表示默认模式,相当于java中的default

6.3.for循环

基本语法1

for ((初始值;循环控制条件;变量变化))
do
    程序
done

从1加到100

touch for1.sh
vim for1.sh
​
#!/bin/bash
​
sum=0
for(( i=0;i<=100;i++))
do
        sum=$[ $sum + $i ]
done
echo $sum
​
chmod 777 for1.sh
./for1.sh
5050

基本语法2

for 变量 in 值1 值2 值3...
do
    程序
done

输出一行:

for os in linux windows macos; do echo $os; done
linux
windows
macos

$*$@表示传递给函数或者脚本的所有参数,不被双引号包含时,都以$1$2....$n的形式输出所有参数。

touch for3.sh
vim for3.sh
​
#!/bin/bash
echo '=============$============='
for i in $*
do
        echo "ban zhang love $i"
done
​
echo '=============$============='
for j in $@
do
        echo "ban zhang love $j"
done
​
chmod 777 for3.sh
./for3.sh cls mly wls
ban zhang love cls
ban zhang love mly

在Shell中,*和∗和@都表示命令行参数(positional parameters)的引用。它们之间的主要区别在于处理参数时的方式。

  1. $*:

    当使用$*时,它将把所有的命令行参数看作一个整体,并以字符串的形式展开。

    可以使用它来迭代所有的参数,但无法单独引用某个参数。

  2. $@:

    当使用$@时,它将把每个命令行参数都视为独立的字符串,并以数组的形式展开。

    可以使用它来单独引用某个参数,或者通过循环来迭代所有的参数。

总结:*将所有命令行参数视为一个整体,而∗将所有命令行参数视为一个整体,而@将每个命令行参数视为独立的字符串。选择使用哪个变量取决于你的需求,如果你需要迭代所有的参数,或者需要单独引用某个参数,那么可以使用相应的变量。

6.4.while循环

while [ 条件判断式 ]
do
        程序
done

1~100的和

touch while.sh
vim while.sh
​
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
        sum=$[$sum+$i]
        i=$[$i+1]
        # 另一种方式
        # let sum+=i
        # let i++
done
​
echo $sum
​
chmod 777 while.sh
./while.sh
5050

7.read读取控制台输入

read (选项) (参数)

选项:

  1. -p:指定读取值的提示符

  2. -t:指定读取值时等待的时间(秒)如果-t不加表示一直等待

参数:

变量:指定读取值的变量名

案例实操

提示7秒内,读取控制台输入的名称

touch read.sh
vim read.sh
​
#!/bin/bash
​
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN
​
chmod 777 read.sh
./read.sh
Enter your name in 7 seconds :HI
HI

8.函数

8.1.系统函数

basename

basename [string/pathname][suffix]

功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来。

basename可以理解为取路径里的文件名称

选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

案例实操:

截取该/home/tang/desktop/my.txt

basename /home/tang/desktop/my.txt
my.txt
​
vim cmd_test.sh
​
#!/bin/bash
​
filename="$1"_log_date$(date +%s)

操作2:

vim parameter.sh
​
#!/bin/bash
echo '===========$==========='
echo script name: $(basename $0 .sh)
echo script path: $(cd $(dirname $0); pwd)
echo lst parameter: $1
echo 2nd parameter: $2
echo '===========$==========='
echo parameter number: $#
echo '===========$==========='
echo $*
echo '===========$==========='
echo $@
​
./parameter.sh a b
===========$===========
script name: parameter
script path: /root/scripts
lst parameter: a
2nd parameter: b
===========$===========
parameter number: 2
===========$===========
a b
===========$===========
a b

basename和dirname都是Unix-like操作系统中常用的命令或函数。

basename用于从给定的路径中提取文件名部分。它会将文件路径作为输入,然后返回不包含路径的文件名。如果路径是"/home/user/file.txt",那么basename将返回"file.txt"作为结果。

dirname用于从给定的路径中提取目录部分。它会将文件路径作为输入,然后返回不包含文件名的路径。如果路径是"/home/user/file.txt",那么dirname将返回"/home/user"作为结果。

8.2.自定义函数

[ function ] funname[()]
{
    Action;
    [return int;]
}

经验技巧

  1. 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行的,不会像其他语言一样先编译。

  2. 函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0~255)

案例实操

touch fun_test.sh
vim fun_test.sh
​
#!/bin/bash
function add()
{
    s=$[$1 + $2]
    return $s
}
​
read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b
​
add $a $b
echo "和:"$?
​
chmod +x fun_test.sh
./fun_test.sh
请输入第一个整数:35
请输入第二个整数:67
和:102

但是上面如果和超过255的话,就不满足相应的答案

所以可以修改:

touch fun_test.sh
vim fun_test.sh
​
#!/bin/bash
function add()
{
    s=$[$1 + $2]
    echo $s
}
​
read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b
​
sum=add $a $b
echo "和:"sum
​
chmod +x fun_test.sh
./fun_test.sh
请输入第一个整数:156
请输入第二个整数:237
和:393

9.正则表示式入门

正则表达式使用单个字符串来描述、匹配一系列符合某个语言规则的字符串,在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某种模式的文本,在Linux中,grep,sed,awk等文本处理工具都支持通过正则表达式进行模式匹配。

常规匹配

一串不包含特殊字符的正则表达式匹配它自己

cat /etc/passwd | grep atguigu

就会匹配所有包含atguigu的行

常用特殊字符

  1. 特殊字符:^

^匹配一行的开头:cat /etc/passwd | grep ^a

会匹配出所有以a开头的行

  1. 特殊字符:$

$匹配一行的结束:cat /etc/passwd | grep t$

会匹配出所有以t结尾的行

  1. 特殊字符:.

.匹配一个任意的字符:cat /etc/passwd | grep r..t

会匹配包含r的所有行

  1. 特殊字符:*

*不单独使用,它和上一个字符连用,表示匹配上一个字符0次或者多次:cat /etc/passed | grep ro*t

会匹配rt,rot,root,rooot等

  1. 字符区间(中括号):[]

[]表示匹配某个范围内的一个字符

[6, 8]匹配6或者8

[0-9]匹配一个0-9的数字

[0-9]*匹配任意长度的数字字符串

[a-z]匹配一个a-z之间的字符

[a-z]*匹配任意长度的字母字符串

[a-c, e-f]匹配a-c或者e-f之间的任意字符

cat /etc/passwd | grep r[a,b,c]*t

会匹配rt,rbt,rabt,rabct等所有行

10.文本处理工具

10.1.cut

cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的,cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

基础用法:cut [选型参数] filename

说明:默认分隔符是制表符

选项参数说明

选项参数功能
-f列号,提取第几列
-d分隔符,按照指定分隔符割裂,默认是制表符"\t"
-c按字符进行分割,后加加n表示取第几列 比如-c 1

实例操作

vim cut.txt
cat cut.txt
dong shen
guan zhen
wo   wo
lai  lai
le   le
cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le

10.2.awk

一个强大的文本分析工具。把文件朱行的读入,一空格为默认分隔符每行切割,切开的部分再进行分析处理。

基本用法:awk [选项参数] '/pattern1/{action} /pattern2/{action2}...' filename

pattern:表示awk在数据中查找的内容,就是匹配模式

action在找到匹配内容时所执行的一系列命令

选项参数说明

选项参数功能
-F指定输入文件分隔符
-v赋值第一个用户定义变量

案例实操

cat /etc/passwd | awk -F ":" '/^root/ {print $7}'
/bin/bash
cat /etc/passwd | awk -F ":" '/^root/ {print $1","$7'}
root./bin/bash

BEGIN在所有数据读取行之前执行;END在这所有数据执行后执行

将passwd文件中的用户id增加数值1并输出

awk -v i-1 -F : '{print $3+i}' passwd
1
2
3
4
ifconfig | grep -n ^$
9:
18:
26:
ifconfig | awk '/^$ {print NR}'
9
18
26

11.综合应用案例

11.1.归档文件

实际生产应用中,往往需要对重要数据进行归档备份。

需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在roo/archive下,

这里用到了归档命令:tar

后面可以加上-c选项表示归档,加上-z选项表示同时进行压缩,得到的文件后缀名为.tar.z。

脚本实现:

vim daily_archive.sh
​
#!/bin/bash
# 首先判断输入参数个数是否为1
if [ $# -ne 1]
then
        echo "参数个数错误!应该输出一个参数,作为归档目录名"
        exit
fi
​
# 从参数中获取目录名称
if [ -d $1 ]
then
        echo
else
        echo
        echo "目录不存在!"
        echo
        exit
fi
​
DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)
​
# 获取当前日期
DATE=$(date +%y%m%d)
​
# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_$DATE.tar.gz
DEST=/root/archive/$FILE
​
# 开始归档目录文件
​
echo "开始归档..."
echo
​
tar -czf $DEST DIR_PATH/$DIR_NAME
​
if [ $? -eq 0 ]
then
        echo
        echo "归档成功!"
        echo "归档文件为:$DEST"
        echo
else
        echo "归档出现问题!"
​
chmod u+x daily_archive.sh
mkdir /root/archive
./daily_archive.sh ../scripts
​
开始归档...
​
tar: 从成员名中删除开头"/"
​
归档成功!
归档文件:/root/archive/archive/archive_scripts_220318.tar.gz
​
crontab -e
​
0 2 * * * #凌晨2点执行 分钟 小时 天 月 星期

11.2.发送消息

我们可以利用Linux系统自带的mesg和write工具,向其他用户发送消息。

需求:实现一个向某用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的信息。脚本需要检测用户是否登录在系统中,是否打开消息功能,以及当前发送消息是否为空。

who am i
root    pts/0   2023-08-10 17:00 (192.168.)

脚本实现:

#!/bin/bash
​
# 查看用户是否登录
login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')
if [ -z $login_user ]
then
        echo "$1 不在线!"
        echo "脚本退出..."
        exit
fi
​
is_allowed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')
​
if [ $is_allowed != "+" ]
then
        echo "$1 没有开启消息功能"
        echo "脚本退出..."
        exit
fi
​
# 确认是否有消息发送
if [ -z $2 ]
then
        echo "没有消息发送"

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

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

相关文章

React原理 - React New Feature

目录 扩展学习资料 React Fragments/Portals/StrictMode【糖果】 Fragments【并列元素外包裹一个伪元素】 Portals【改变组件挂载节点】 Strict Mode【严格模式&#xff0c;老工程中使用&#xff0c;提示即将失效方法】 React Concurrent Mode【大招】 不可阻断渲染/可中…

【广州华锐互动】煤矿设备AR远程巡检系统实现对井下作业的远程监控和管理

煤矿井下作业环境复杂&#xff0c;安全隐患较多。传统的巡检方式存在诸多弊端&#xff0c;如巡检人员难以全面了解井下情况&#xff0c;巡检效率低下&#xff0c;安全隐患难以及时发现和整改等。为了解决这些问题&#xff0c;提高煤矿安全生产水平&#xff0c;越来越多的企业开…

C#winform自定义软键盘

软键盘应用 触摸一体机没有硬件键盘&#xff0c;系统软键盘占面积大&#xff0c;位于屏幕底部&#xff0c;点击不是很方便。某些时候只需要输入数字&#xff0c;这时弹出九宫格数字键盘就足够了。 以下实现的是弹出一个弹窗作为软键盘。 实现 创建一个窗体FrmSoftKey&#xf…

【Git-Exception】Git报错:fatal: unable to auto-detect email address

报错信息&#xff1a; *** Please tell me who you are. Run git config --global user.email “youexample.com” git config –global user.name “Your Name” to set your account’s default identity. Omit --global to set the identity only in this repository. fatal…

JVM:JIT实时编译器

一、相关 ⾼级编程语⾔按照程序的执⾏⽅式分为两种 编译型&#xff1a;一次性将代码编译为机器码解释型&#xff1a;通过解释器一句一句的将代码解释为机器码之后&#xff0c;再运行。每个语句都是执行的时候才翻译。 JAVA代码执行过程 &#xff08;编译阶段&#xff09;首先将…

SAP 物料主数据屏幕增强

增强步骤 1.为主表添加一个附加结构 根据业务需求新建一个结构&#xff0c;结构中放入需要增强的屏幕字段并激活。 打开事务代码SE11&#xff0c;在需要保存的主表中添加这个附加结构并激活。 注&#xff1a;根据业务需求及屏幕增强的视图判断需要保存的主表是哪张&#xff…

AutoSar Com模块

文章目录 Com模块功能通信传输控制整体 communication 结构Signal 发送流程设置信号的 UpdateBit信号的超时处理信号的传输方式 Signal 发送时序图Signal 接收流程接收信号的 UpdateBit Signal 接收时序图Com_TxPduInfo / Com_RxPduInfo、Com_PduGrpVector 数据来源Com_TxSigGr…

二维码生成点击按钮展示二维码

使用HBuider 1.先安装插件 &#xff08;地址 : https://ext.dcloud.net.cn/plugin?id1287&#xff09; 这里直接就安装到了uni-modules里面了 2、引入 import uQRCode from ‘/uni_modules/Sansnn-uQRCode/components/u-qrcode/u-qrcode.vue’ 3、代码实现 <template…

下载git

1.官网下载可能会有访问失败 2.用其他的镜像源下载 快 准 狠 CNPM Binaries Mirror

python3 简易 http server:实现本地与远程服务器传大文件

在个人目录下创建新文件httpserver.py &#xff1a; vim httpserver.py文件内容为python3代码&#xff1a; # !/usr/bin/env python3 import datetime import email import html import http.server import io import mimetypes import os import posixpath import re import…

1200V的SiC - Trench - MOSFET的性能和耐久性

标题&#xff1a;Performance and Ruggedness of 1200V SiC - Trench - MOSFET 摘要 本文介绍了一种新颖的SiC沟槽MOSFET概念。该器件旨在平衡低导通损耗和Si-IGBT类似的可靠性。介绍了45 mΩ/1200 V CoolSiCTM MOSFET的静态和动态性能以及短路能力的基本特点。在状态电阻的有…

JAVA数组、String与集合详解

目录 1. 数组 1.1 初始化 1.2 遍历 1.3 数组执行原理 1.4 Arrays操作数组 2. String字符串 3. 集合 3.1 Collection 3.1.1 常用方法 3.1.2 分类 3.1.3 遍历方式 3.1.4 List 3.1.5 Set 3.1.6 适用场景 3.1.7 Collection总结 3.2 Collection其他操作 3.2.1 并发修…

系统配置与性能评价

系统配置与性能评价 考点概况性能指标性能评价方法阿姆达尔解决方案 考点概况 性能指标 标红的常考 了解性能指标对应哪一个的 性能指标是干嘛的 网络和路由器都有吞吐量&#xff0c;优先选择网络 d 数据处理速度&#xff1a;PDR c D A 根据选项去选择最合适的就行 B和D都是网…

把DTC从Excel导入cdd的方法

本文是基于CANdelaStudio12.0讲解 问题一&#xff1a;当导入DTC的xxx.cdi文件报如下红色错误 可能原因&#xff1a;在设置具有下拉框的属性的内容时&#xff0c;输入的内容不在下拉框列表中 解决办法:在.cddt文件中更新“”Error Code Table“”内容&#xff0c;把新的选项更新…

Matlab信号处理2:方波信号的合成与分解

周期信号可展开为傅里叶级数&#xff0c;因此方波信号可用若干谐波去拟合。以下是Matlab的实现&#xff1a; %% 方波信号的分解% 1.生成方波信号 % 方波信号周期、基波频率 T0 2; w0 (2 * pi) / T0; % 方波信号值为1的区间 T1 0.5; % 绘图周期&#xff1a;(2*n1)个周期 n …

SpringBoot项目--电脑商城【用户注册】

1.创建数据表 1.1 创建t_user表 CREATE TABLE t_user (uid INT AUTO_INCREMENT COMMENT 用户id,username VARCHAR(20) NOT NULL UNIQUE COMMENT 用户名,password CHAR(32) NOT NULL COMMENT 密码,salt CHAR(36) COMMENT 盐值,phone VARCHAR(20) COMMENT 电话号码,email VARCH…

S7-1500/ET200MP 使用 TIA STEP7 进行自由口通讯

1. 硬件列表 2. 组态和配置 1) 新建项目 2) 创建CPU1500站点 3) 组态CM PtP 串口 4) 设置协议自由口 3. 编写通信程序 1) 逻辑地址的填写 2) 调用发送接收功能块 3) 创建发送DB块和接收DB块 4. 设备连接 5. 通信测试 1) 设置串口调试调试软件SSCOM32 2)…

某米ax3000路由器组网解析

我们使用某米k60手机与某米ax3000 wifi6路由器组网&#xff0c;来分析和学习网络速率与瓶颈限制。 某米 AX3000 路由器简介 某米 AX3000 路由器是一款支持 WiFi 6 的双频路由器&#xff0c;它的 MIMO 是 22&#xff0c;也就是两根天线。MIMO 是 Multiple Input Multiple Outpu…

[hpsupport@privatemail.com].Elbie勒索病毒的最新威胁:如何恢复您的数据?

引言&#xff1a; 随着技术的不断发展&#xff0c;网络犯罪分子也在不断进化和改进他们的方法&#xff0c;其中之一就是恶名昭著的勒索病毒。最近&#xff0c;出现了一种新的威胁&#xff0c;名为 [ hpsupportprivatemail.com ].Elbie 勒索病毒。让我们一起深入探索这个威胁&am…

拥抱国产化,生态软件信创兼容适配之路

国产化是指技术引进项目投产后所生产的产品中&#xff0c;国内生产件的数量占整件产品生产件数量。换句话说&#xff0c;软件国产化的占比&#xff0c;直接影响到技术是否会在某一个时点上被”卡脖子“。 随着国家经济的发展和技术水平的提高&#xff0c;国家整体实力大大增强…