shell? 变量!

news2024/11/29 4:48:32

目录

​编辑

🐨什么是shell

🐨编译型语言和解释型语言 

🐨解释型语言

🐨变量 

🐨1.局部变量:

🐨2.环境变量通常又称“全局变量”

🐨3.设置环境变量: 

🐨命名法则举例

🐨变量命名

🐨取消变量

🐻特殊变量

🐻1、只读变量(常量):

🐻查看常量值

🐻括号的使用

🐻位置变量

🐻$* 和 $@ 的区别。

🐻$0 引用名称的使用

🐻shift命令: 整体往左移位

🐻退出状态


 

什么是shell

shell 是一个命令解释器,提供用户和机器之间的交互
支持特定语法,比如逻辑判断、循环
每个用户都可以有自己特定的 shell
还有其他 zsh ksh
CentOS7 默认的 shell bash(Bourne Agin Shell)
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。 Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell 是一种解释型语言,这种语言经过编写后不经过任何编译就可以执行,是一种脚本语言。和编译型语言是执行前翻译不同,解释型语言的程序是执行时翻译,所以效率要差一些

编译型语言和解释型语言 

优点:
编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:
编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

 代表语言:

CC++PascalObject-Cswift等。

CentOS 系统中支持很多 shell, 可以通过查看 /etc/shells 文件,查看所支持的shell,目前大多数的 Linux 基本都使用 bash
[root@localhost ~]# cat /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
[root@localhost ~]# 

解释型语言

解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。每一个语句都是执行的时候才能翻译。这样解释性语言每执行一次要翻译一次,效率表较低
优点:
有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护

缺点: 

每次运行的时候都要解释一遍,性能上不如编译型语言

代表语言:

JavaScriptPythonErlangPHPPerlRuby 

bash shell 有两种工作
[root@localhost shell]# cat kang.sh 
#!/bin/bash                        //是一个标记,告诉系统执行这个文件需要的解释器
#this line is a comment            // “#”号开头的行代表注释
echo "Hello world"
模式:互动模式和脚本模式。脚本模式效率更高,可以实现自动化

1.运行脚本有两种方法

使用bash命令执行

[root@localhost shell]# bash kang.sh 
Hello world

// “.”命令也都可以执行脚本,且不需要可执行权限

[root@localhost shell]# . kang.sh 
Hello world

2. 、给脚本添加可执行权限,然后直接就可以执行了

[root@localhost shell]# chmod +x kang.sh 
[root@localhost shell]# ./kang.sh 
Hello world

PS: 脚本是各种命令的集合,终究还是要执行服务的 

查看命令储蓄路径

[root@localhost bin]# echo $PATH
/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost bin]# cat test.sh 
#!/bin/bash
ls /etc/passwd
mkdir /data
cp /etc/passwd /data/
[root@localhost bin]# chmod +x test.sh
[root@localhost bin]# test.sh
/etc/passwd
[root@localhost bin]# 

变量 

顾名思义,变量就是其值可以变化的量。从变量的本质来说,变量名是指向一片用于存储数据的内存空间。变量有局部变量、环境变量之分。在脚本中,往往需要使用变量来存储有用信息,比如文件名、路径名、数值等,通过这些变量可以控制脚本的运行行为

1.局部变量:

是指在某个 shell 中生效的变量,对其他 shell 来说无效,局部变量的作用域被限定在声明它们的shell 中,可以使用 local 内建命令来 显式” 的声明局部变量,但仅限于函数内使用

2.环境变量通常又称全局变量

以区别于局部变量。在 shell 脚本中,变量默认就是全局的,为了让子shell 继承当前 shell 的变量,可以使用 export命令将其定义为环境变量

$PATH UID HOSTNAME PWD (存在内存中的)

3.设置环境变量: 

第一种: declare -x
[root@localhost shell]# declare -x class="Linux base"
[root@localhost shell]# echo $class
Linux base
第二种: export
[root@localhost shell]# export class1="Linux"
[root@localhost shell]# echo $class1
Linux
第三种:
[root@localhost shell]# name="bj"
[root@localhost shell]# echo $name
bj

总结

总结: declare -x export 这种设置变量的方式,是全局的环境变量,(全局环境变量的特点: 子进程会继承父进程的环境变量),第三种" 变量名= 变量值 " 的这种方式,默认只在当前进程有效,如果想要子进程也有效,可以使用前两种暴露的方式,或者,将变量到/etc/profile 文件中,
注意等号左右不能加空格,引号可以是单引号,也可以是双引号 , 当然也可以是引用一条命令执行后的结果( 使用反引号
[root@localhost shell]# name=`cat /etc/fstab`
[root@localhost shell]# echo $name
# # /etc/fstab # Created by anaconda on Wed Nov 2 23:38:14 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos-root / xfs defaults 0 0 UUID=1d919f48-cb52-43a9-bacb-9ea0e03a51b7 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0
// 使用反应号之后,显示格式会变化,变成了一行了。那么怎么能够显示正常那?
[root@localhost shell]# echo "$name"

#
# /etc/fstab
# Created by anaconda on Wed Nov  2 23:38:14 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=1d919f48-cb52-43a9-bacb-9ea0e03a51b7 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@localhost shell]# 
// 那么同样还有,变量的值也可以是一个变量
[root@localhost shell]# name=bj
[root@localhost shell]# name2=zs
[root@localhost shell]# name3=$name
[root@localhost shell]# echo $name3
bj
那么问题来了,如果我们现在把 name1 的值改了, name3 的值是否也会跟着改变那?不会
[root@localhost shell]# name1=base
[root@localhost shell]# echo $name3
bj
[root@localhost shell]# 

命名法则举例

studentname====>大驼峰 S tudent N ame, 小驼峰: student N ame (单驼峰 双驼峰 三驼峰)

变量命名

shell 中的变量必须以字母或者下划线开头,后面可以跟数字、字母和下划线,长度没有限制,区分大小写。 " 见名知意 "
变量赋值和取值
定义变量:变量名 = 变量值
注意点1:变量名和变量值之间用等号紧紧相连,之间没有任何空格
[root@localhost shell]# name=lisi
[root@localhost shell]# name= lisi
bash: lisi: 未找到命令...
[root@localhost shell]# 
注意点2:当变量值中有空格时必须用引号括起,否则会出现错误,可以是双引号,也可以是单引号
[root@localhost shell]# name=li lei
bash: lei: 未找到命令...
[root@localhost shell]# 
变量的取值很简单,在变量名前加 $ 号就可以了,严谨的方法是 ${} 。建议用后者
[root@localhost shell]# echo $name
lisi
[root@localhost shell]# echo ${name}
lisi
[root@localhost shell]# 
PS: 这里注意,在很多时候,运行脚本会提示错误,仔细检查脚本后还是不确定哪里出现了问题,那么这时候不妨将变量的取值写成标准格式,说不定就会有惊喜。

取消变量

取消变量使用 unset, 后面跟变量名。函数也是可以被取消的, unset 后面也是可以跟上函数名来取消函数的
[root@localhost shell]# unset name
[root@localhost shell]# echo ${name}

特殊变量

上边我们接触到局部变量和环境(全局)变量,也知道了他们特点:局部变量只在当前shell 有效,环境变量的有效范围为当前 shell 和子 shell 。除了这些还有其他一些变量,也需要我们注意

1、只读变量(常量):

只能声明,但不能修改和删除
[root@localhost shell]# readonly name1="wukong"
[root@localhost shell]# echo $name1
wukong
[root@localhost shell]# name1=bajie
-bash: name1: 只读变量
[root@localhost shell]# 
还可以使用 declare -r 声明常量
[root@localhost shell]# declare -r name2="bajie"
[root@localhost shell]# echo $name2
bajie
[root@localhost shell]# 
readonly: 有效期直到是进程结束。那么这个只读变量有什么用那?比方说pi=3.14 3.1415926

查看常量值

[root@localhost shell]# readonly -p
declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath"
declare -ir BASHPID
declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d"
declare -ar BASH_REMATCH='()'
declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")'
declare -ir EUID="0"
declare -ir PPID="4989"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
declare -ir UID="0"
declare -r name1="wukong"
declare -r name2="bajie

括号的使用

小括号用法:一次性使用。不会对环境产生影响

[root@localhost shell]# (name=yjs;echo $name)
yjs
[root@localhost shell]# echo $name

[root@localhost shell]# 
大括号 :前后有空格。这个是对全局有影响的。
[root@localhost shell]# { name=adam; echo $name; }
adam
[root@localhost shell]# echo $name
adam
[root@localhost shell]#

位置变量

shell 中还有一些预先定义的特殊只读变量,它们的值只有在脚本运行时才能确定
$0 :代表脚本本身名字
$1----$9 :第一个位置参数 ------- 9 个位置参数
$# :脚本参数的个数总和
$@ :表示脚本的所有参数
$* : 表示脚本的所有参数
[root@localhost shell]# cat example.sh
#!/bin/bash
echo "这个脚本的名字是:$0"
echo "参数一共有:$#个"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "第三个参数是:$3"
[root@localhost shell]# 
[root@localhost shell]# bash example.sh 1 2 3 4 5
这个脚本的名字是:example.sh
参数一共有:5个
参数的列表是: 1 2 3 4 5
参数的列表是: 1 2 3 4 5
第一个参数是: 1
第二个参数是: 2
第三个参数是:3
如果有 10 个以上的数改怎么表示
[root@localhost shell]# echo {1..15}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[root@localhost shell]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@localhost shell]# 
怎么才能让它识别为$10那?这个时候就要用到花括号了。
[root@localhost shell]# cat example.sh
#!/bin/bash
echo "这个脚本的名字是:$0"
echo "参数一共有:$#个"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "第三个参数是:$3"
echo "第12个参数是:${12}"
[root@localhost shell]# 
[root@localhost shell]# bash example.sh {1..15}
这个脚本的名字是:example.sh
参数一共有:15个
参数的列表是: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
参数的列表是: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
第一个参数是: 1
第二个参数是: 2
第三个参数是:3
第12个参数是:12
[root@localhost shell]# 
// 那么具体这个有什么用那?,其实可以这样,假设我们要复制一个文件到另一台虚拟机。用什么命令那?scp
[root@localhost shell]# cat /etc/redhat-release > mylrelease.txt
[root@localhost shell]# cat mylrelease.txt
CentOS Linux release 7.9.2009 (Core)
[root@localhost shell]# 

$* $@ 的区别。

$* $@ 都代表了脚本的所有参数,但是, $* 它会把显示的结果当做一个整体显示,而$@ 会把收集到的结果分开来显示。不过要注意,如果$*和 $@ 有双引号的前提下,显示效果会做区分,如果都没有双引号,效果一样。
[root@localhost shell]# cat t1.sh 
#!/bin/bash
echo "t1脚本所有参数是:$*"
bash t2.sh "$*"
[root@localhost shell]# cat t2.sh 
#!/bin/bash
echo "t2脚本的第一个参数:$1"
[root@localhost shell]# bash t1.sh 1 2 3
t1脚本所有参数是:1 2 3
t2脚本的第一个参数:1 2 3
[root@localhost shell]# 
t1.sh 中的 bash t2.sh “$*” 换成 $@ sed 怎么换
[root@localhost shell]# sed -i '3s/\$\*/\$\@/' t1.sh
[root@localhost shell]# bash t1.sh 1 2 3
t1脚本所有参数是:1 2 3
t2脚本的第一个参数:1
[root@localhost shell]# 

$0 引用名称的使用

再来说这个 $0 $0 是名称,那么如果说,我把一个脚本,添加一个软连接。这个时候如果再运行脚本,那么它的$0 显示的名字应该是原来的名字那?还是更改过后的名字?
[root@localhost shell]# ln -s example.sh link.sh
[root@localhost shell]# bash link.sh
这个脚本的名字是:link.sh
参数一共有:0个
参数的列表是: 
参数的列表是: 
第一个参数是: 
第二个参数是: 
第三个参数是:
第12个参数是:
[root@localhost shell]# 
那么以后我们就可以利用这一点,即便是同一个脚本,到时候也可以拓展出不同的功能。比如说,就可以利用这一点。那么就可以让他们返回的值是不一样的。这个就是以后在写脚本的时候,就要注意下,需要对$0 做判断了。

shift命令: 整体往左移位

[root@localhost shell]# cat example.sh
#!/bin/bash
echo "这个脚本的名字是:$0"
echo "参数一共有:$#个"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "第三个参数是:$3"
echo "第12个参数是:${12}"
shift
echo "这个脚本的名字是:$0"
echo "参数一共有:$#个"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "第三个参数是:$3"
echo "第12个参数是:${12}"
shift
echo "这个脚本的名字是:$0"
echo "参数一共有:$#个"
echo "参数的列表是: $@"
echo "参数的列表是: $*"
echo "第一个参数是: $1"
echo "第二个参数是: $2"
echo "第三个参数是:$3"
echo "第12个参数是:${12}"
[root@localhost shell]# 
PS : 当然这是默认的移动一位,当然也可以通过设置决定移动多少位,在shift 后边直接加上想要移动的位数即可。

退出状态

进程使用退出状态来报告成功或者失败:
   $ ? 变量保存最近的命令退出状态
   0 代表成功, 1~255 代表失败
举例
[root@localhost shell]# ls /tmp/
systemd-private-5d5242bfa7a445ff929e39dfdd38104b-bolt.service-eJViXd
systemd-private-5d5242bfa7a445ff929e39dfdd38104b-chronyd.service-AhBuTC
systemd-private-5d5242bfa7a445ff929e39dfdd38104b-colord.service-IMbJvs
systemd-private-5d5242bfa7a445ff929e39dfdd38104b-cups.service-N5SsIj
systemd-private-5d5242bfa7a445ff929e39dfdd38104b-rtkit-daemon.service-63nbw5
systemd-private-e403b5d9448d4c048c3a7f654f134ba8-bolt.service-MNeFrF
systemd-private-e403b5d9448d4c048c3a7f654f134ba8-chronyd.service-A8qNGd
systemd-private-e403b5d9448d4c048c3a7f654f134ba8-colord.service-WUjrtE
systemd-private-e403b5d9448d4c048c3a7f654f134ba8-cups.service-eCfKFF
systemd-private-e403b5d9448d4c048c3a7f654f134ba8-rtkit-daemon.service-IQMGcU
yum_save_tx.2023-07-06.15-27.Jcn602.yumtx
[root@localhost shell]# echo $?
0
[root@localhost shell]# ls /apc
ls: 无法访问/apc: 没有那个文件或目录
[root@localhost shell]# echo $?
2
[root@localhost shell]# id test &> /dev/null
[root@localhost shell]# echo $?
1
[root@localhost shell]# 
当然判断命令是否执行成功,不仅仅是简单的判断$? 还有更严谨的判断语句,这个我们以后会讲,现在先知道就可以了。那么在这里还需要知道一点。我们的脚本里边,往往是大于一条命令的,这个$? 返回的 0 值,如果返回的是0, 那么这个 0值到底是返回的哪一条命令的值那?
[root@localhost shell]# cat test1.sh
#!/bin/bash
hostname
[root@localhost shell]# bash test1.sh
localhost.localdomain
[root@localhost shell]# echo $?
0
[root@localhost shell]# 
这是一条命令,如果是多秒命令那 ? ,这里故意将上述明林写错试一下
[root@localhost shell]# cat test1.sh
#!/bin/bash
hostnam
[root@localhost shell]# bash test1.sh
test1.sh:行2: hostnam: 未找到命令
[root@localhost shell]# echo $?
127
[root@localhost shell]# cat test1.sh
#!/bin/bash
hostnam
ls
[root@localhost shell]# bash test1.sh
test1.sh:行2: hostnam: 未找到命令
example.sh  kang.sh  link.sh  mylrelease.txt  t1.sh  t2.sh  test1.sh
[root@localhost shell]# echo $?
0
[root@localhost shell]# 
说明, $? 通常只返回最后一条命令的状态。但不是绝对,因为还有另外一种情况。比如语法错误
[root@localhost shell]# cat test1.sh
#!/bin/bash
if
ls
[root@localhost shell]# bash test1.sh
test1.sh:行4: 语法错误: 未预期的文件结尾
[root@localhost shell]# echo $?
2
[root@localhost shell]# 
再还有,只要返回的不是 0 ,肯定是错误的那?也是不一定的。因为 $? 的返回值,是可以修改的。
正常的 $0
[root@localhost shell]# cat test1.sh
#!/bin/bash
ls
[root@localhost shell]# bash test1.sh
example.sh  kang.sh  link.sh  mylrelease.txt  t1.sh  t2.sh  test1.sh
[root@localhost shell]# echo $?
0
[root@localhost shell]# 
修改退出状态码
[root@localhost shell]# cat test1.sh 
#!/bin/bash
ls
exit 10
[root@localhost shell]# bash test1.sh
example.sh  kang.sh  link.sh  mylrelease.txt  t1.sh  t2.sh  test1.sh
[root@localhost shell]# echo $?
10
[root@localhost shell]# 
PS : 那么我们就要考虑,根据不同的返回码,我们是不是就可判断出系统的运行状态啊? 假设说,我们规定了计算机会有几种情况,如果说一种情况返回10 ,另一种情况返回 20 ,还有 30 ,那么我们就可根据系统返回的值的不同,来判断出,系统肯定是满足了某种条件。这样就可以作为定位判断系统状态的依据,其实在我们上网的时候有返回发 404 ,其实也是类似这种方法的。200 OK 404 Not Found3xx重定向 4xx 客户端错误 5xx 服务器错误当然exit 命令在外部也可以使用,意思是退出 bash

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

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

相关文章

NZ系列工具:NZ11:VBA光标跟随策略

【分享成果,随喜正能量】生活就像是一杯苦茶,而情感是茉莉花,调兑在一起,才会馥郁芬芳。人活在世上,有诸多苦楚萦心,若不懂得自我调解,终究会被纷呈的世相掩埋。所以,更多的时候&…

Ubuntu18.04修改file descriptors(文件描述符限制),解决elasticsearch启动报错问题

最近在学习elasticsearch,使用的平台是Ubuntu18.04,在部署过程中的坑记录一下。 下载安装的过程就不说了,在启动es的时候报错 1 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 看了下…

TIOBE 7月编程语言榜出炉,这个语言强势突围,前三发生重大变化

TIOBE 公布了 2023 年 7 月的编程指数信息,在这个月,语言榜有什么新变化,让我们一起去看看吧! JavaScript 创历史新高 几个月前,编程语言 C 占据了 TIOBE 指数的第 3 位(超过了 Java)。 但C的…

Golang 中的流程控制

1、Golang 中的流程控制 Go 语言中最常用的流程控制有 if 和 for ,而 switch 和 goto 主要是为了简化代码、降低重复 代码而生的结构,属于扩展类的流程控制。 2、if else(分支结构) if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。…

JDBC技术【SQL注入、JDBC批量添加数据、JDBC事务处理、其他查询方式】(三)-全面详解(学习总结---从入门到深化)

目录 SQL注入 JDBC批量添加数据 JDBC事务处理 Blob类型的使用 插入Blob类型数据 其他查询方式 动态条件查询 SQL注入 什么是SQL注入 所谓 SQL 注入,就是通过把含有 SQL 语句片段的参数插入到需要 执行的 SQL 语句中, 最终达到欺骗数据库服务器执行…

如何将各个阶段的数据进行对比?Sugar BI 教你快速搞定

折线图可以将当前和某个时间段的数据进行对比,比如前一天、上周、去年。 数据对比开启条件 当折线图 X 轴有且只有一个日期或时间字段,并且聚合方式为年-xx,Y 轴有且只有一个度量字段时,可以开启并配置折线图数据对比。 支持数据…

VMware使用ubuntu虚拟机的一些使用技巧

VMware安装Ubuntu虚拟机一般相对比较容易,本文记录一些VMware使用ubuntu虚拟机的其他使用技巧。 一、Ubuntu共享文件夹 1.1、 挂载镜像文件: 虚拟机->设置->硬件->CD/DVD.右边“连接”下面选择“使用IOS镜像文件”,浏览选择虚拟机…

【独家揭秘】微信居然可以自动通过好友申请并自动打招呼啦!

最近有客户来咨询,说是因为做内容引流到微信,所以每天很多人加她,微信都快被加爆了,每天手动通过好友申请和打招呼,回答了很多一模一样的问题,就一个小时已经让她很疲惫了,很机械的重复这些事。…

caj文件怎么转成pdf文件格式?分享两个免费方法!

在数字化的世界中,文件格式转换是我们日常生活和工作中常见的需求。CAJ文件是中国学术文献网络出版总库使用的一种文件格式,而PDF是全球广泛接受的文件格式,具有良好的兼容性和稳定性。本文将介绍两种免费的方法,帮助你将CAJ文件转…

细节:双花括号({{ ... }})在Vue.js中的用法

问题&#xff1a; 为什么后端返回的是数字类型时&#xff0c; {{ form.orderPrice }}可以拿到值展示&#xff0c; {{ form.orderPrice || "-" }} 不可以&#xff1f; 接口返回数据&#xff1a; <el-form-item label"订单金额&#xff1a;" prop"…

2.0 熟悉CheatEngine修改器

Cheat Engine 一般简称为CE&#xff0c;它是一款功能强大的开源内存修改工具&#xff0c;其主要功能包括、内存扫描、十六进制编辑器、动态调试功能于一体&#xff0c;且该工具自身附带了脚本工具&#xff0c;可以用它很方便的生成自己的脚本窗体&#xff0c;CE工具可以帮助用户…

shader学习记录——彩色光圈

参考连接 https://blog.csdn.net/stalendp/article/details/21993227 Shader "Custom/ColorRingShader" {Properties{_MainTex ("Texture", 2D) "white" {}}SubShader{Tags { "RenderType""Opaque" }LOD 100Pass{CGPROGRA…

fastapi docs打开为空白解决办法

空白的原因 使用的cdn为国外cdn 解决办法 使用国内cdn 解决步骤 1.打开此文件D:\Program Files\Python\Lib\site-packages\fastapi\openapi\docs.py 2.修改cdn地址 国内cdn不好找呀 &#xff08;1&#xff09;.七牛云存储 开放静态文件CDN&#xff0c;地址&#xff1a;h…

ubuntu20离线安装nodejs、GO、go.rice及yarn

虽然是离线安装&#xff0c;但该有的安装包还是需要的… 目录 1、安装nodejs1.1查看本地是否存在nodejs1.2创建nodejs文件夹1.3下载nodejs二进制文件1.4解压并改名1.5添加软连接 2安装GO2.1创建go文件夹2.2下载go二进制文件2.3解压文件2.4添加环境变量2.5设置sudo可执行go命令…

C++11 function包装器

前言 在C中&#xff0c;有三种可调用对象&#xff1a;函数指针&#xff0c;仿函数&#xff0c;lambda表达式。 三者有相似的作用和效果&#xff0c;但使用形式有很大的差异。 为了进行统一&#xff0c;C11引进了function包装器 文章目录 前言一. function的使用二. function对…

DataGrip连接clickhouse数据库后,左侧不显示库中的表

一、问题描述 使用datagrip链接clickhouse&#xff0c;本来左侧时可以显示数据库中对应的表的列表的。但是&#xff0c;这个链接clickhouse不显示。 二、问题解决 参考一些文档后&#xff0c;而且因为当前采用的时2023.1.2的版本&#xff0c;所以&#xff0c;选项有些改变。…

记录AndroidStrudio打包报错与解决方案(一)

问题一&#xff1a;打包报错 Unity.IL2CPP.Building.BuilderFailedException: C:\Users\user\AppData\Local\Android\Sdk\ndk\21.0.6113669\toolchains\llvm\prebuilt\windows-x86_64\bin\clang "C:\Users\user\AppData\Local\Temp\tmp7277.tmp" -o "D:\Buil…

Linux计划任务crontab

顺序是可以任意的, 任意指的是,选项可以都放前面 变量放后面 或者一个选项 一个选项对应的命令 df 查看文件占有情况 d1 只显示1级深度 -h格式好看点 显示所有用户进程和内存进程. uid是所属用户 PPID是父进程 kill终止进程 杀死进程&#xff0c;是正常退出。 如果普通杀不…

数据智能交融,AI引领未来 | 数说故事成为华为云盘古大模型3.0首批联创单位之一

7月7日-9日&#xff0c;华为开发者大会2023&#xff08;Cloud&#xff09;在东莞举行&#xff0c;并在7日下午正式对外发布“华为云盘古大模型3.0”。盘古大模型3.0围绕行业重塑、技术扎根、开放同飞三大方向&#xff0c;持续打造核心竞争力&#xff0c;为行业客户、伙伴及开发…

疯狂收割offer,软件测试面试题,项目经验板块常问(附答案)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面试题&#xff1…