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

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,

文章目录

  • 1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统
    • 1.1 变量:readonly定义只读变量,unset删除变量
    • 1.2 函数:shell脚本传递的参数中包含空格,应使用单引号或双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。if [ -n str1 ] 当字符串的长度大于0时为真(字符串非空)
    • 1.3 运算:算术、关系、布尔、逻辑、字符串、文件运算
    • 1.4 流程控制:if、for、while、case
  • 2.ssh_tool:sed -i 's/\r//g' 文件(删除从txt复制来代码的换行符)
  • 3.build_bmc:To go back to default recipes: devtool reset linux-aspeed , devtool reset u-boot
  • 4.环境变量:用bash调用脚本的时候会创建一个和自己一模一样的shell子进程执行这个外部命令。这个子进程中设置了自己的运行的环境变量,此时父进程的环境变量并没有改变。bash test.sh == ./test.sh。
  • 5.scp_image:不用管STRING1
  • 6.bmc_upgrade:断电重启才从主启,当前永远mtd4
  • 7.自动升级bmc:AC ON物理上电


1.shell语法:Shell是用C语言编写的程序,它是用户使用Linux的桥梁,硬件>内核(os)>shell>文件系统

1.1 变量:readonly定义只读变量,unset删除变量

在这里插入图片描述
在这里插入图片描述
如果字符串中有空格,必须需要使用引号(str=hello world会报错)。
在这里插入图片描述
在这里插入图片描述
获取字符串长度:echo ${#str}expr length “${str}”
截取字符串:echo ${str:1:4}:显示字符串第1到第4个字符。
echo ${str:4}:从左边第4个字符开始,一直到结束。
echo ${str:0-6:3}:从倒数第6个字符开始的3个字符。
echo ${str:0-6}:从倒数第6个字符开始,一直到结束。

file=/dir1/dir2/dir3/my.file.txt
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt     / 可换成 .#*.
${file##*/}:删掉最后一个 / 及其左边的字符串:my.file.txt${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 / 及其右边的字符串:(空值)

在这里插入图片描述
在这里插入图片描述

#!/bin/bash
for i in `ifconfig | grep -o ^[a-z0-9.]*`
doname=$i echo $nameipaddr=$(ifconfig $i|sed -n 2p|awk '{ print $2 }'|tr -d 'addr:')  # -d删除echo http://$1:8080/api/slave -d '{"slave":"'$2${name}'","ip":"'${ipaddr}'"}'
done

在这里插入图片描述
如下截取 = 号左边即第一个。
在这里插入图片描述

"-d")shiftcase ${1} in"lc1" | "lc2" | "cmm" | "fb1" | "fb2");;*)usage;;esacdev=${1}led_devie=${dev%[^a-zA-Z]}  # lcif [ "$1" != "cmm" ];thenindex=${dev/*[a-zA-Z]/}   # 1fi;;

设置别名,printf,重定向,exit,until,shift,basename/dirname
在这里插入图片描述
不添加引号,转义将不被执行,如下转义。
在这里插入图片描述
command > /dev/null 2>&1不在屏幕上显示输出结果错误。/dev/null 是一个特殊文件,写入到它的内容都会被丢弃,从该文件读取内容,什么也读不到。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ps -ef | grep memtester | grep -v grep | cut -c 9-16 | xargs kill -9

# a.sh
a()
{return 1
}
if ! a ; thenecho "111"
fi$ ./a.sh 
111
# shift.sh
until [ $# -eq 0 ]
do
echo "第一个参数为: $1 参数个数为: $#"
shift
done$./shift.sh 1 2 3 4    
第一个参数为: 1 参数个数为: 4
第一个参数为: 2 参数个数为: 3
第一个参数为: 3 参数个数为: 2
第一个参数为: 4 参数个数为: 1
# shift1.sh
sum=0
until [ $# -eq 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "sum is: $sum"$./shift1.sh 10 20 15
结果显示:45
basename /usr/local/nginx/conf/nginx.conf
nginx.conf
basename -s .conf /usr/local/nginx/conf/nginx.conf
nginxdirname //
/
dirname /a/b/
/a 
dirname a
.
dirname a/b
arealpath $path : 返回$path的绝对路径,路径不存在会报错,文件不存在不会报错

declare与let:let命令和双小括号 (( )) 的用法是类似的,它们都是用来对整数进行运算,不能对小数(浮点数)或字符串运算。
在这里插入图片描述
在这里插入图片描述
整型运算如上同如下。
在这里插入图片描述
在这里插入图片描述
test:用于检查某个条件是否成立,它可以进行数值、字符、文件三个方面的测试
在这里插入图片描述

1.2 函数:shell脚本传递的参数中包含空格,应使用单引号或双引号将该参数括起来,以便于脚本将这个参数作为整体来接收。if [ -n str1 ] 当字符串的长度大于0时为真(字符串非空)

在这里插入图片描述
在这里插入图片描述

1.3 运算:算术、关系、布尔、逻辑、字符串、文件运算

算术:
在这里插入图片描述
关系:
在这里插入图片描述
在这里插入图片描述
布尔:
在这里插入图片描述
逻辑:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件测试运算:
在这里插入图片描述
在这里插入图片描述

1.4 流程控制:if、for、while、case

if:
在这里插入图片描述
for:
在这里插入图片描述
while:
在这里插入图片描述
until:
在这里插入图片描述
case:
在这里插入图片描述
break与continue:
在这里插入图片描述

2.ssh_tool:sed -i ‘s/\r//g’ 文件(删除从txt复制来代码的换行符)

#!/usr/bin/expect
# b文件,llength等是expect中专属的,和ftp那些命令一样
# obmc-server:~$ whereis expect
# expect: /usr/bin/expect /usr/share/man/man1/expect.1.gz
puts "$argv0"set arg_leng [llength $argv]
puts "$arg_leng" set argv_0   [lindex  $argv 0]
puts "$argv_0"# @obmc-server:~/test$ ./b w
# ./b
# 1
# w
#!/usr/bin/expect
# 如上一行必须加且必须在第一行
if { [llength $argv] < 1} {puts "Usage:"puts "$argv0 raspberr ttyUSBx <pi2 0>"  # ssh-tool.sh pi2 0puts "$argv0 raspberr <pi1> <pi2> <pi3>"  # ssh-tool.sh pi1puts "$argv0 project_name <hollywood> <s3ip-bmc> <s3ip-bsp>"    # ssh-tool.sh hollywood# puts "$argv0 raspberrNUM ttyUSBx [force]"     # ssh-tool.sh pi1 0 force# puts "force if other used tty will kill process,杀串口进程"exit 1
}set arg_leng [llength $argv  ]
set argv_0   [lindex  $argv 0]
set ttyUSBx  [lindex  $argv 1]
# set force    [lindex $argv 2]
set timeout 20
# set pi3_ip [exec sh -c {curl -s http://10.75.92.228:8080/api/help | python -m json.tool |grep -i "pi3" |cut -d '"' -f 4}]
set pi3_ip 10.75.159.104
set local_file ./tmp/deploy/images/obmc-cl/flash-obmc-cl
set passwderror 0#11111111111111111111111111111111111111111111111111111111111111111111111111
if { $argv_0 == "pi1" } {set passwd 123456spawn ssh pi@$pi1_ip
}
if { $argv_0 == "pi2" } {set passwd 123456spawn ssh pi@$pi2_ip
}
if { $argv_0 == "pi3" } {set passwd 123456spawn ssh pi@$pi3_ip
}
if { $argv_0 == "hollywood" } {set passwd 0penBmcspawn ssh-keygen -f "/home_a/yu/.ssh/known_hosts" -R $hollywood_ipspawn ssh root@$hollywood_ip
}
if { $argv_0 == "docker" } {set passwd 1spawn ssh cit@10.75.159.16expect {"*yes/no*" {send "yes\r"exp_continue}"*assword:*" {if { $passwderror == 1 } {puts "passwd is error"exit 2}set timeout 1000set passwderror 1send "$passwd\r"sleep 0.2send "sudo su\r"sleep 0.2send "$passwd\r"sleep 0.2send "docker exec -it 16d93b0d2026 bash\r"sleep 0.2send "zsh\r"sleep 0.2send "ls\r"sleep 0.2send "cd\r"interact}}
}#11111111111111111111111111111111111111111111111111111111111111111111111111
expect {"*yes/no*" {send "yes\r"exp_continue  # 该项被匹配后,还能继续匹配该expect判断语句内的其他项}"*assword:*" {if { $passwderror == 1 } {puts "passwd is error"exit 2}set timeout 1000set passwderror 1send "$passwd\r"if { $arg_leng == 1} {interact   # 执行完成后保持交互状态,把控制权交给控制台,这个时候便可以手动操作。# 如果没有该命令,命令完成后即退出。}if { $arg_leng == 2} {exp_continue  }}"*pi@raspberrypi*" {send " picocom -b 115200 /dev/ttyUSB$ttyUSBx\r"exp_continue}"*FATAL: cannot lock*" {# if { $force == "force" } {#     puts "you can kill process and try again"#     exit 1# }send " ps -ef |grep -i ttyUSB$ttyUSBx\r "interact}"*FATAL: cannot open*" {puts "!!!   ########################################   !!!"puts "!!!no ttyUSB$ttyUSBx"exit 1}"*Terminal ready*" {interact}
}

3.build_bmc:To go back to default recipes: devtool reset linux-aspeed , devtool reset u-boot

#!/bin/bash# downloads() {
#     echo "buildpath: [$buildpath]"
#     build_exist=$(grep "DL_DIR" $buildpath/conf/local.conf)
#     echo "buildexist: [$build_exist]"
#     if [ ! -n "$build_exist" ]; then
#         echo "DL_DIR ?= \"/home_a/y/usr/local/downloads\"" >> "conf/local.conf"
#     fi
# }# buildplatform() {
#     source openbmc-init-build-env meta-huaqin/meta-$1 build-$1
#     buildpath=$(pwd)
#     downloads
#     bitbake $1-image
#     rm -rf conf/local.conf
# }usage() {echo "Usage: build an openbmc image"echo "    $(basename $0) <platform>"echo "    $(basename $0) <platform> <feature>"echo "    $(basename $0) <platform> <clean>"echo "    $(basename $0) <platform> <clean> <feature>"echoecho "Examples:"echo "    $(basename $0) kestrel"echo "    $(basename $0) kestrel ipmid"echo "    $(basename $0) kestrel clean"echo "    $(basename $0) kestrel clean ipmid"
}
# if [ $# -eq 1 ]; then# buildplatform $1
if [ $# -eq 1 ]; thensource ./setup $1;echo "DL_DIR ?= \"/home_a/y/usr/local/downloads_ocp\"" >> "conf/local.conf"   # openbmc-hollywood-master/build/conf/local.conf 或 meta-huaqin/meta-xs9880-8c/conf/local.conf.samplebitbake  obmc-phosphor-image 
elif [ $# -ge 2 ]; thencase $2 in"clean")source ./setup $1;echo "DL_DIR ?= \"/home_a/y/usr/local/downloads_ocp\"" >> "conf/local.conf"bitbake  obmc-phosphor-image -c cleanall obmc-phosphor-image;;"u-boot")# source openbmc-init-build-env meta-huaqin/meta-$1 build-$1 && buildpath=$(pwd); downloads; bitbake u-boot;;"linux-aspeed")# source openbmc-init-build-env meta-huaqin/meta-$1 build-$1 && buildpath=$(pwd); downloads; bitbake linux-aspeed;;*)source openbmc-init-build-env meta-huaqin/meta-$1 build-$1 && buildpath=$(pwd); downloads; bitbake $2;;esac
elseusage
fi
exit 0
# build目录下获取源码:devtool modify linux-aspeed ,devtool modify u-boot   
# This will create local Linux package under /workspace/sources/linux-aspeed for development
chmod 777 /home_a/y/app/bin/(usr/local/bin/)build_bmc~$ vi .bash_profile
export PATH=/home_a/y/app/bin:$PATH~$ vi .bashrc
alias gr='grep -nr'

4.环境变量:用bash调用脚本的时候会创建一个和自己一模一样的shell子进程执行这个外部命令。这个子进程中设置了自己的运行的环境变量,此时父进程的环境变量并没有改变。bash test.sh == ./test.sh。

用source来执行脚本的时候,不会创建子进程,而是在父进程中直接执行,所以当需要程序修改当前shell本身的环境变量的时候,用source命令。source test.sh == . test.sh。如下记住ebe从大到小。
在这里插入图片描述
上面就是改变linux的env的三种方法,每个用户env都不一样,env中HOME为用户主目录。
在这里插入图片描述
export在命令行单独输入是临时的(export…,env可查到多出了刚export的,但用户登出再登录,env查看没有刚export的)。但在.bash_profile中都含有export,用户一登录就执行.bash_profile,所以env中含有这些环境变量,这样export可视为永久。
在这里插入图片描述
所有可执行程序都要PATH指定,如ls,pwd(也是可执行程序)不加./(./是在当前目录执行),因为在冒号分隔(冒号不是连接)的几个目录下找。sqlplus命令行命令在/oracle/bin中。
在这里插入图片描述
在这里插入图片描述
ls这个可执行程序就是在bin目录下,上面PATH已指定。如下若未改为英文显示:未找到命令(中文)。
在这里插入图片描述
如下必须在用户主目录/oracle,才能vi .bash_profile。
在这里插入图片描述
在这里插入图片描述
如下对所有用户有效。
在这里插入图片描述
/etc/profile 是文件(里面有不建议在这文件里修改的英文说明), /etc/profile.d/ 是目录(如下新建.sh文件创建全局环境变量)。
在这里插入图片描述
如下在sss.sh中写入下行。/etc/profile这个文件中有这么一段shell:for i in /etc/profile.d/*.sh;,会在每次启动时自动加载profile.d目录中每个配置。
在这里插入图片描述
不想要什么变量直接删除 /etc/profile.d/ 下对应的shell 脚本即可,当用户重新登录shell如下或source /etc/profile 时会触发。
在这里插入图片描述

5.scp_image:不用管STRING1

#!/usr/bin/expect if { [llength $argv] < 2} { puts "Usage:" puts "$argv0 <Image path> IP" puts "$argv0 <Image path> IP <path>" exit 1 
}set timeout 20 
set Local_File [lindex $argv 0] 
set IP [lindex $argv 1]
set STRING 0 
spawn ssh-keygen -f "/home_a/y/.ssh/known_hosts" -R $IPproc myscpfunc { STRING1 } {set passwd 0penBmcset passwderror 0 expect { "*assword:*" { if { $passwderror == 1 } { puts "passwd is error" exit 2 } set timeout 1000 set passwderror 1 send "$passwd\r" exp_continue } "yes/no" { send "yes\r" exp_continue } timeout { puts "connect is timeout" exit 3 }}
}if { [llength $argv] == 2} { if {[regexp -nocase "obmc-phosphor-image" $Local_File]} {spawn scp $Local_File root@$IP:/tmp/imagesmyscpfunc $STRINGspawn scp /home_a/y/bak/bmc_upgrade root@$IP:~/myscpfunc $STRING} else {spawn scp $Local_File /home_a/y/bak/bmc_upgrade root@$IP:~/myscpfunc $STRING}
}if { [llength $argv] == 3} { set path [lindex $argv 2]spawn scp $Local_File  root@$IP:$pathmyscpfunc $STRING
} 

在这里插入图片描述

6.bmc_upgrade:断电重启才从主启,当前永远mtd4

if [ $# -lt 1 ];thenecho "Usage: `basename $0`+<1;2;all>"echo "1   : flash0"echo "2   : flash0ro"echo "all : flash0 & flash0ro"echo "ocp : update ocpbmc image"exit 255
fi
cat /proc/mtd |grep -i "flash0\""
cat /proc/mtd |grep -i "flash0ro"F0_string=$(cat /proc/mtd |grep -i flash0\" |cut -b 1-4)
F1_string=$(cat /proc/mtd |grep -i flash0ro |cut -b 1-4)
if [ "$F1_string" = "" ]; thenF1_string=$(cat /proc/mtd |grep -i flash1 |cut -b 1-4)
fiif [ $1 == "1" ]; thensource /usr/local/bin/openbmc-utils.shecho "Update /dev/$F0_string"flashcp  ./flash-* /dev/$F0_string
elif [ $1 == "2" ]; thensource /usr/local/bin/openbmc-utils.shecho "Update /dev/$F1_string"flashcp ./flash-* /dev/$F1_string
elif [ $1 == "all" ]; thensource /usr/local/bin/openbmc-utils.shecho "Update /dev/$F0_string & /dev/$F1_string"echo "First  : Update /dev/$F0_string"flashcp ./flash-* /dev/$F0_stringecho "Second : Update /dev/$F1_string"flashcp ./flash-* /dev/$F1_string
elif [ $1 == "ocp" ]; thenImage_ID=$(ls /tmp/images/)if [ ${#Image_ID} -eq 8 ];thenecho "IMAGE ID = ${Image_ID}"elseecho "IMAGE ID = ${Image_ID}"echo "Error-----multiple image"exit 255fiecho "busctl set-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$Image_ID xyz.openbmc_project.Software.Activation RequestedActivation s xyz.openbmc_project.Software.Activation.RequestedActivations.Active"busctl set-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$Image_ID xyz.openbmc_project.Software.Activation RequestedActivation s xyz.openbmc_project.Software.Activation.RequestedActivations.Activesleep 3echo "busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$Image_ID xyz.openbmc_project.Software.Activation Activation" busctl get-property xyz.openbmc_project.Software.BMC.Updater /xyz/openbmc_project/software/$Image_ID xyz.openbmc_project.Software.Activation Activationsleep 1
fiif [ $? == "0" ];thenecho "Update Over"echo "reboot now !!!!"reboot
elseecho "Update fail !!!!"
fi

7.自动升级bmc:AC ON物理上电

在这里插入图片描述

#!/bin/sh
#shellcheck disable=SC1091
. /usr/local/bin/openbmc-utils.sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/binBMC_VERSION=/var/log/automatic_upgrade/version/bmc_version #主备版本都和这个比较,而不是主备互相比较
BMC_FW=/var/log/automatic_upgrade/fw/flash-xs9880-8c
BMC_WTD2_COUNT=/var/log/wtd_count
BMC_FW_UPDATE_COUNT=/var/log/bmc_update_count
FW_UPDATE_TIMES=8check_file_ok() {if [ ! -f "$BMC_WTD2_COUNT" ]; then   #这行if是:假如不存在文件echo 0 > $BMC_WTD2_COUNT   #创建文件并写0fiif [ ! -f "$BMC_FW_UPDATE_COUNT" ]; thenecho 0 > $BMC_FW_UPDATE_COUNTfiif [ ! -f "$BMC_VERSION" ] || [ ! -f "$BMC_FW" ]; thenecho "$BMC_VERSION or $BMC_FW file does not exist"exit 255fi
}check_fw_update_count() {bmc_fw_update_cont=$(cat "$BMC_FW_UPDATE_COUNT")if [ "$FW_UPDATE_TIMES" -lt "$bmc_fw_update_cont" ]; thenlogger -p user.err "$0 update bmc times exceeded"exit 255fi
}check_wtd2_count() {if [ "$wdt2_timeout_count" -eq 0 ]; thenecho 0 > $BMC_WTD2_COUNTfi
}#11111111111111111111111111111111111111111111111111111111111111111111111111111
update_bmc_fw() {if [ "$1" = "current" ]; thenflashcp $BMC_FW /dev/mtd4elif [ "$1" = "other" ]; thenflashcp $BMC_FW /dev/mtd9fi
}change_bmc_boot() {if [ "Master"x = "$bmc_boot"x ]; then bmc_boot_info.sh reset slaveelsebmc_boot_info.sh reset masterfi
}get_bmc_version() {if [ "$1" = "other" ]; thenbmc_version=$(version_dump --pingpong | awk -F ": " '{print $2}')elif [ "$1" = "current" ]; thenbmc_version=$(version_dump bmc | awk -F ": " '{print $2}')fiecho "$bmc_version"
}#1111111111111111111111111111111111111111111111111111111111111111111111111111111
update_bmc_fw_update_count() {index=$(cat "$BMC_FW_UPDATE_COUNT")index=$((index+1))echo $index > $BMC_FW_UPDATE_COUNT
}update_wdt2_timeout_count() {echo "$wdt2_timeout_count" > $BMC_WTD2_COUNT
}clean_bmc_fw_update_count() {echo 0 > $BMC_FW_UPDATE_COUNT
}#111111111111111111111111111111111111111111111111111111111111111111111111111111
main() {check_file_okbmc_boot_info=$(bmc_boot_info.sh)bmc_boot=$(echo $bmc_boot_info |awk -F " " '{print $10}')wdt2_timeout_count=$(echo $bmc_boot_info |awk -F " " '{print $4}')bmc_base_version=$(cat "$BMC_VERSION")bmc_wtd2_count=$(cat "$BMC_WTD2_COUNT")current_version=$(get_bmc_version current)other_version=$(get_bmc_version other)check_wtd2_countcheck_fw_update_countecho "$current_version" echo "$other_version"echo "$bmc_wtd2_count"echo "$wdt2_timeout_count"if [ "$bmc_wtd2_count"x = "$wdt2_timeout_count"x ]; then   # N(No) WTD没有增加if [ "$bmc_base_version"x = "$current_version"x ]; then   # 文件版本和当前版本一致if [ "$bmc_base_version"x = "$other_version"x ]; then   # 文件版本和对面版本一致echo "all same"clean_bmc_fw_update_countelse    # 文件版本和当前版本一致,但不和对面版本一致 【只有非当前版本一致】echo "only other not same"update_bmc_fw_update_countupdate_bmc_fw otherfielse  # 文件版本和当前版本不一致if [ "$bmc_base_version"x = "$other_version"x ]; then  # 【只有当前BMC版本不一致】echo "only current not same"change_bmc_bootelse   # 【两块BMC版本都不一致】echo "all not same"update_bmc_fw_update_countupdate_bmc_fw otherchange_bmc_bootfifielse #Y WTD增加了update_wdt2_timeout_countif [ "$bmc_base_version"x = "$current_version"x ]; then  #【当前BMC版本一致】echo "current same"update_bmc_fw_update_countupdate_bmc_fw otherelse  # 【当前BMC版本不一致】echo "current not same"update_bmc_fw_update_countupdate_bmc_fw otherchange_bmc_bootfifi
}
main

相关文章:

【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc,bmc_wtd,

文章目录1.shell语法&#xff1a;Shell是用C语言编写的程序&#xff0c;它是用户使用Linux的桥梁&#xff0c;硬件>内核(os)>shell>文件系统1.1 变量&#xff1a;readonly定义只读变量&#xff0c;unset删除变量1.2 函数&#xff1a;shell脚本传递的参数中包含空格&am…...

刷题记录:牛客NC208250牛牛的最美味和最不美味的零食

传送门:牛客 题目描述: 牛牛为了减&#xff08;吃&#xff09;肥&#xff08;好&#xff09;&#xff0c;希望对他的零食序列有更深刻的了解&#xff0c;所以他把他的零食排成一列&#xff0c;然后对每一 个零食的美味程度都打了分&#xff0c;现在他有可能执行两种操作&…...

微搭低代码从入门到精通08-轮播容器

我们上一篇讲解了基础布局组件&#xff0c;讲解了普通容器和文本组件的用法&#xff0c;本篇我们继续介绍布局组件。 小程序中经常会有个功能是轮播图展示的功能&#xff0c;多张图片可以顺序进行切换。我们学习使用轮播容器的时候&#xff0c;先考虑切换的图片从哪来&#xf…...

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测 目录分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测分类效果基本介绍模型描述程序设计参考文献分类效果 基本介绍 1.Matlab实现SSA-CNN麻雀算法优化卷积神经网络多特征分类预测&…...

华为10年经验测试工程师,整理出来的python自动化测试实战

前言 全书共分11章&#xff0c;第一章是基础&#xff0c;了selenium家谱&#xff0c;各种组件之间的关系以及一些必备知识。第二章告诉如何开始用python IDLE写程序以及自动化测试环境的搭建。第三章是webdriver API&#xff0c;我花了相当多时间对原先的文档&#xff0c;冗余…...

OpenCV杂谈 - 如何导出图像到内存中其他结构

前言 最近在net环境使用OpenCV,记录些疑难杂点. ​​​ 一、OpenCV主要结构 Mat 二、Cols,Rows 和 Width,Hight 三、导入\导出到内存中其他结构 四、按矩形 在Mat之间复制 总结 一、OpenCV主要结构 Mat Mat是OpenCV中的主要结构. 主要有两个用途. 1 存储图片信息,2 存…...

Session与Cookie的区别(四)

咖啡寄杯的烦恼 虽然店里生意还可以&#xff0c;但小明无时无刻不想着怎么样发大财赚大钱&#xff0c;让店里的生意变得更好。 他观察到最近好多便利商店开始卖起了咖啡&#xff0c;而且时不时就买一送一或是第二件半价&#xff0c;并且贴心地提供了寄杯的服务。 寄杯就是指说你…...

Linux 文件锁 - fcntl

什么是文件锁&#xff1f; 即锁住文件&#xff0c;不让其他程序对文件做修改&#xff01; 为什么要锁住文件&#xff1f; 案例&#xff0c;有两个程序&#xff0c;都对一个文件做写入操作。 #include <unistd.h> #include <stdio.h> #include <stdlib.h> …...

CellularAutomata元胞向量机-2-初等元胞自动机MATLAB代码分享

%% 二维元胞自动机%imagesc(a)的色度矩阵a中0->256由蓝变黄% 规则&#xff0c;先把中间点置为1&#xff0c;每一时间每一点如果%周围八个点和为偶数&#xff0c;则变为0&#xff0c;为奇数则变为 1% 颜色控制clc, clearMap [1 1 1; 0 0 0];% [0 0 0] is black, [1 1 1] is …...

OpenStack云平台搭建(6) | 部署Neutron

目录 1.在控制节点登录数据库配置 2.要创建服务证书&#xff0c;完成这些步骤 3.创建网络服务API端点&#xff1a; 4.安装网络组件 5.配置neutron组件 6.配置 Modular Layer 2 (ML2) 插件 7.配置Linuxbridge代理 8.配置DHCP代理 9.配置元数据代理 10.编辑/etc/nova/no…...

Lesson 05.Configuring the Oracle Network Environment

Lesson 05. Configuring the Oracle Network Environment 文章目录Lesson 05. Configuring the Oracle Network Environment1. 监听程序的配置文件有哪些&#xff0c;如何命名&#xff0c;保存在什么位置&#xff1f;2. Oracle 网络的服务名称文件是如何命名的&#xff0c;需要…...

理论五:接口vs抽象类的区别,如何用普通的类模拟抽象类和接口

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模…...

【Hello Linux】 Linux的权限以及Shell原理

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍Linux的基础命令 Linux的权限以及Shell原理Shell的运行原理权限Linux中权限的概念如何切换用户如何提升当前操作的权限如何添加信任…...

【STM32】【HAL库】遥控关灯2 分机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…...

代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

93.复原IP地址 看完题后的思路 典型分割问题略lue略剪枝条件 sub&#xff1a; 1&#xff09; 不是一位首字母为0 2&#xff09;大于三位 3&#xff09;介于0-255之间 4) 当已分割得到3个时&#xff0c;第四个直接从startIndex到末尾就行 代码 ArrayList<String> slist…...

Unity UI合批的问题

今天看到一个问题&#xff0c;主要说的是Unity中的UI资源合批的问题之前一直以为主要和UI资源在Hierarchy中的排列顺序有关&#xff0c;但其实这并不是最主要的&#xff0c;因为Unity会对同一个Canvas下的UI进行排序&#xff08;注&#xff1a;不同Canvas下的资源是不能够合批的…...

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…...

PC端开发GUI

PC端开发GUI 一、搭建PC端环境:常规方式1、Python2、Pycharm二、搭建PC端环境:创建虚拟环境1、创建文件夹存放虚拟环境相关2、配置环境变量3、创建.ui文件4、.ui文件转成.py文件5、打包.py文件来发布.exe一、搭建PC端环境:常规方式 1、Python 注意Python版本不能超过3.9,…...

解读手机拍照的各个参数(拍照时,上面会有6个符号)

1第一个符号是闪光灯符号&#xff0c;如下图所示。有四种模式&#xff0c; 手机的闪光灯分别为关闭、自动、开启和常亮四种状态。 关闭&#xff1a;就是在任何情况下都不会闪光 自动&#xff1a;由手机来判断此时的光线强弱&#xff0c;若手机测光认为光线太弱&#xff0c;则…...

数字钥匙最新进展文章

在未来出行上&#xff0c;智能汽车越来越卷。 新车除了拼高精度激光雷达、堆大算力芯片、标配辅助驾驶、智能语音识别&#xff0c;还在车钥匙上展开了激烈角逐&#xff0c;越来越多的厂商开始在量产车型上搭载数字钥匙&#xff0c;实现无钥匙进入车内。 去年1月蔚来发布轿车E…...

如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)

一、安装前准备 虚拟机运行软件&#xff1a;VMware Workstation Pro&#xff0c;版本&#xff1a;16.0.0 。VMware Mac OS支持套件&#xff1a;Unlocker。Mac OS系统镜像。 如果VMware 在没有安装Unlocker的情况下启动&#xff0c;在选择客户机操作系统时没有支持Mac OS的选项…...

C++中的强制类型转换

接触过C语言的朋友都知道&#xff0c;C语言中也有强制类型转换&#xff0c;但是C语言中的强制类型转换会有一些问题&#xff0c;比如&#xff1a; int a 0x1234; char b (char)a; 上述的代码出现一个问题就是a 这个int型强制转化成b 这个char型时损失了一些精度&#xff0c…...

任何人都可以学习Rasa之优秀Rasa学习资源推荐

任何人都可以学习Rasa之优秀Rasa学习资源推荐 欢迎同学们报名Gavin老师的Rasa系列课程&#xff0c;任何人都可以学习Rasa之优秀Rasa学习资源推荐&#xff1a; 1.NLP on Transformers高手之路137课 2 .Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 &#xff08;7大项目Ex…...

数据中心的 TCP-Delay ACK 与 RTO, RACK

TCP 对 RTO 有个最小值限制&#xff0c;一般限制为 MIN_RTO 200ms。之所以有这个限制&#xff0c;在于要适应 Delay ACK&#xff0c;而 Delay ACK 的意义&#xff0c;不多说&#xff0c;摘自 RFC1122&#xff1a; MIN_RTO 应该足够大&#xff0c;以覆盖 Delay ACK 的影响&…...

MySQL与常见面试题

目录 事务概述ACIDAUTOCOMMIT总结并发一致性问题丢失修改读脏数据不可重复读幻读原因和解决方法隔离级别未提交读(READ UNCOMMITTED)提交读(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)加锁封锁粒度封锁类型读写锁意向锁...

FFmpeg进阶: 采用音频滤镜对音频进行转码

文章目录采样位数采样率声道布局码率使用FFmpeg音频滤镜进行转码参考链接很多时候为了让视频文件适应不同的播放领域&#xff0c;我们需要对音频文件进行转码操作&#xff0c;转码操作其实主要就是修改音频文件的各种参数包括:采样位数、采样率、音频布局、码率等等。下面分别介…...

C++:AVL树

AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下&#xff0c;时间复杂度为O&#xff08;N&#xff09;&#xff1b; 两位俄罗斯的数学家G.M.Ade…...

Docker中安装Oracle-12c

前言 MySQL和Oracle是开发中常用到的两个关系型数据库管理系统&#xff0c;接上一期内容&#xff0c;这一期在Docker中完成oracle-12c的安装和配置。 安装oracle-12c 1、拉取oracle-12c镜像 启动Docker Desktop后在cmd窗口中执行docker search oracle命令&#xff0c;搜索O…...

教你如何用Python分析出选注双色球号码

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 数据集介绍 找从19年到现在的开奖历史数据&#xff0c;我们首先要把这个历史数据拿到&#xff0c; 拿到我们再进行做分析&#xff0c;分析每个号码出现的频率是多少&#xff0c; 哪个多&#x…...

elasticsearch映射及字段类型

查询映射关系类型上对字段的类型进行映射&#xff0c;我们前面知道可以通过get方法请求_mapping查询指定类型的映射关系&#xff1a;此语句可以查询get-together索引下的group类型的映射关系更新映射关系使用put方法可以更新类型的映射这里指定了new-events类型的字段映射关系&…...

医疗美容 手机网站建设/seo站外推广有哪些

Canvas 通过 JavaScript 来绘制 2D图形。Canvas 是逐像素进行渲染的。开发者可以通过javascript脚本实现任意绘图。Canvas元素是HTML5的一部分&#xff0c;允许脚本语言动态渲染位图像。canvas是HTML5中的新元素&#xff0c;使用javascript用它来绘制图形、图标、以及其它任何视…...

建设银行官方网站注册/app排名优化公司

从测试描述了解到该问题复现概率较高&#xff0c;因此决定刷最新版本后重新抓份log。果然&#xff0c;seek几次就遇到了问题&#xff0c;查看log并定位到最后一次seek的位置&#xff0c;可以明显的看到如下异常打印&#xff1a; //seekto指令 04-30 12:02:08.840 16164 16164 I…...

网络广告营销的实现方式/seo具体优化流程

我们要为路由提供请求的URL和其他需要的GET及POST参数&#xff0c;随后路由需要根据这些数据来执行相应的代码&#xff08;这里“代码”对应整个应用的第三部分&#xff1a;一系列在接收到请求时真正工作的处理程序&#xff09;。 因此&#xff0c;我们需要查看HTTP请求&#…...

如何上传网站/临沂森拓网络科技有限公司

修改/etc/grub.conf文件 将该文件中以kernel开头的一行行尾添加vgaask 或者以如下数值代替ask ################################################################## color 640x480 800x600 1024x768 1280x1024 256 769 771 …...

用织梦模板怎么做动态网站/谈谈你对网络营销的认识

2014-11-30 晚上 字节流 System.in是基本的InputStream流&#xff0c;System.out是基本的OutputStream流&#xff0c;如果要实现字符流从控制台读入 BufferedReader bufferedReadernew BufferReader(Reader inputStream) InputStreamReader 是Reader的一个子类&#xff0c;可…...

哈尔滨建设网站制作/营销咨询

文章目录1前期准备2代码1前期准备 1安装devexpress18.0盗版可用于vs2012和4.5框架 2安装完后devexpress并不会出现在工具栏中&#xff0c;右键所有窗体修复 3拖入如下插件&#xff0c;左边为cameracontrol右边为picturebox 4设计如下功能点一下左边camercontrol&#xff0c;…...