Linux之shell基础(六)

news2024/12/27 13:01:15

1、shell 简介

shell 介于内核与用户之间,负责命令的编辑,是人机交互的一个桥梁
在这里插入图片描述
shell 的种类

[root@yhm ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/ksh
/bin/rksh
/usr/bin/ksh
/usr/bin/rksh
种类说明
/bin/shbash的一个快捷方式
/bin/bashbash是大多数Linux默认的shell,包含的功能几乎可以涵盖shell所有的功能
/sbin/nologin示非交互,不能登录操作系统
/bin/dash小巧,高效,功能相比少一些
/bin/csh具有C语言风格的一种shell,具有许多特性,但也有一些缺陷
bin/tcshcsh的增强版,完全兼容csh

2、shell 脚本

将需要执行的命令保存到文本中,按照顺序执行。它是解释型的,意味着不需要编译。

1、shell 脚本的基本写法

1、脚本第一行,#!指定解释器
#!/bin/bash 表示使用 bash 解释器解析
注意:如果直接将解释器路径写死在脚本里,可能在某些系统就会存在找不到解释器的兼容性问题,所以可以使用 #!/bin/env 解释器
2、脚本第二部分,注释(#号)说明,对脚本的基本信息进行描述【可选】
3、脚本第三部分,脚本要实现的具体代码的内容。如:

[root@yhm bin]# vim env_bash
#!/bin/env_bash
# 以下内容是对脚本的基本信息的描述
# Name:名字
# Desc:描述 describe
# Path:存放路径
# Usage:用法
# 下面就是脚本的具体内容
a='hello'
b='world'     

2、shell 脚本的执行方法

1、编写shell脚本
[root@yhm bin]# vim 1.sh
#!/bin/env bash
# 以下内容是对脚本的基本信息的描述
# Name:1.sh
# Desc:描述 describe
# Path:/bin/1.sh
# Update:2023-05-09
# 下面就是脚本的具体内容
echo 'hello java'
ehco 'hello linux'
echo 'hello shell'
2、增加可执行权限
[root@yhm bin]# chmod +x 1.sh
3、标准方式执行标准(建议)
[root@yhm bin]# pwd
/bin
[root@yhm bin]# /bin/1.sh
hello java
hello linux
hello shell
[root@yhm bin]# ./1.sh
hello java
hello linux
hello shell

注意:标准执行方式的脚本必须要有可执行的权限

4、非标准的执行方法(不建议)

1、直接在命令行指定解释器执行

[root@yhm bin]# bash 1.sh
hello java
hello linux
hello shell
[root@yhm bin]# sh 1.sh
hello java
hello linux
hello shell

2、使用 source 命令读取脚本文件,执行文件里的代码

[root@yhm bin]# source 1.sh
hello java
hello linux
hello shell
5、bash 引号

双引号“”:会把引号的内容当成整体来看待,允许通过 $ 符号引用其他变量值
单引号‘’:会把引号的内容当成整体来看待,禁止引用其他变量值,并且shell 中的特殊符号都被视为普通字符
反撇号``:和 $() 一样,引号和括号里的命令会优先执行。如果存在嵌套,反撇号不能用。

[root@yhm ~]# echo "$(hostname)"
yhm
[root@yhm ~]# echo '$(hostname)'
$(hostname)
[root@yhm ~]# echo 'hostname'
hostname
[root@yhm ~]# echo "hostname"
hostname
[root@yhm ~]# echo $(date +%Y)
2023
[root@yhm ~]# echo $(date)
2023年 05月 08日 星期一 23:26:08 EDT
[root@yhm ~]# echo $(hostname)
yhm
[root@yhm ~]# echo `echo `date +%Y``
date +%Y
[root@yhm ~]# echo `date +%Y`
2023
[root@yhm ~]# echo `echo $(date +%Y)`
2023
[root@yhm ~]# echo $(echo `date +%Y`)
2023
[root@yhm ~]# echo -e "hello\nworld\c"
hello
world[root@yhm ~]# 

注:选项 -e 开启转义,\n 换行,\c:不换

3、注释

代码执行过程中,解释器会自动忽略注释。
单行注释格式:

# 这是一个注释

多行注释格式:

:<<EOF
注释内容
注释内容
注释内容
EOF

注:EOF 必须成对出现,表示注释的开始与结束,EOF也可以使用其他符号

4、变量

变量是用来临时保存数据的,该数据是可以变化的数据

1、变量定义

变量名=变量值
变量名:用来临时保存数据的
变量值:临时的可变化的数据

[root@yhm bin]# A=hello
[root@yhm bin]# echo $A
hello
[root@yhm bin]# echo ${A}
hello
[root@yhm bin]# A=world
[root@yhm bin]# echo $A
world
[root@yhm bin]# unset A
[root@yhm bin]# echo $A

2、变量的定义规则

1、变量名区分大小写
[root@yhm bin]# A=hello
[root@yhm bin]# a=world
[root@yhm bin]# echo $A
hello
[root@yhm bin]# echo $a
world
2、变量名不能有特殊符号
[root@yhm bin]# *A=hello
bash: *A=hello: 未找到命令...
[root@yhm bin]# @A=hello
bash: @A=hello: 未找到命令...
[root@yhm bin]# ?A=hello
bash: ?A=hello: 未找到命令...

注意:对于由空格的字符串给变量赋值时,要用引号引起来

[root@yhm bin]# a=hello world
bash: world: 未找到命令...
[root@yhm bin]# a="hello world"
[root@yhm bin]# a='hello world'
3、变量名不能以数字开头
[root@yhm bin]# a1=hello
[root@yhm bin]# 1a=hello
bash: 1a=hello: 未找到命令...

注意:不能以数字开头并不代表变量名中不能包含数字

4、等号两边不能有任何空格
[root@yhm bin]# a =123
bash: a: 未找到命令...
[root@yhm bin]# a= 123
bash: 123: 未找到命令...
[root@yhm bin]# a = 123
bash: a: 未找到命令...
5、变量名尽量做到见名知意

3、变量的定义方式

1、直接赋值给变量
[root@yhm bin]# a=1234567
[root@yhm bin]# echo $a
1234567
[root@yhm bin]# echo ${a:2:4}
3456

$变量名 和 ${变量名} 的异同:

相同点:都可以调用变量
不同点:${变量名} 可以只截取变量的一部分,而 $变量名 不可以

2、命令执行结果赋值给变量
[root@yhm bin]# a=`date +%Y`
[root@yhm bin]# echo $a
2023
[root@yhm bin]# a=`hostname`
[root@yhm bin]# echo $a
yhm
[root@yhm bin]# a=$(hostname)
[root@yhm bin]# echo $a
yhm
3、交互式定义变量(read)

目的:让用户自己给变量赋值,比较灵活
语法:read [选项] 变量名
常见选项:

选项说明
-p定义提示用户输入信息的语句
-n定义字符数(限制变量值的长度)
-s隐藏用户输入的内容(不显示)
-t定义超时时间,默认单位为秒(限制输入变量的超时时间)

1、用户自己定义变量值

[root@yhm bin]# read name
jingxuan
[root@yhm bin]# echo $name
jingxuan
[root@yhm bin]# read -p "Input your name please:" name
Input your name please:jingxuan
[root@yhm bin]# echo $name
jingxuan

2、变量值来自文件

[root@yhm ~]# cat 1.txt
abc
[root@yhm ~]# read c < 1.txt
[root@yhm ~]# echo $c
abc
4、定义有类型的变量(declare)

目的:给变量做一些限制,固定变量的类型,比如:整型、只读
用法:declare [选项] 变量名=变量值
常用选项:

选项说明
-i定义整型变量
-r定义只读变量
-a定义普通数组,查看普通数组
-A定义关联数组,查看关联数组
-x将变量通过环境导出
[root@yhm ~]# declare -i A=123
[root@yhm ~]# echo $A
123
[root@yhm ~]# A=hello
[root@yhm ~]# echo $A
0
[root@yhm ~]# declare -r B=hello
[root@yhm ~]# echo $B
hello
[root@yhm ~]# B=shell
-bash: B: 只读变量
[root@yhm ~]# unset B
-bash: unset: B: 无法取消设定: 只读 variable

4、变量的分类

1、本地变量

本地变量是当前用户自定义的变量,只在当前进程中有效,其它进程及当前进程的子进程无效。

2、环境变量

环境变量不仅对当前进程有效,而且能够被子进程调用。
env:查看当前用户的环境变量
set:查询当前用户的所有变量(临时变量与环境变量)
export 变量名=变量值 或 变量名=变量值; export 变量名
1、临时将一个本地变量变成环境变量

[root@yhm ~]# export A=hello
[root@yhm ~]# env | grep A
A=hello

2、永久生效

vim /etc/profile  或 /.bash_profile
export A=hello
3、全局变量

全局所有的用户和程序都能调用和继承,新建的用户也默认能调用.相关配置文件如下:

文件名说明备注
$HOME/.bashrc当前用户的bash信息,用户登录时读取定义别名、umask、函数等
$HOME/.bash_profile当前用户的环境变量,用户登录时读取
$HOME/.bash_logout当前用户退出当前shell时最后读取定义用户退出时执行的程序等
/etc/bashrc全局的bash信息,所有用户都生效
/etc/profile全局环境变量信息系统和所有用户都生效
$HOME/.bash_history用户的历史命令history -w:保存历史记录,history -c:清空历史记录

说明:以上文件修改后,都需要重新source让其生效或者退出重新登录。
用户登录系统读取相关文件的顺序:

  1. /etc/profile
  2. $HOME/.bash_profile
  3. $HOME/.bashrc
  4. /etc/bashrc
  5. $HOME/.bash_logout
4、系统变量

系统变量是内置bash中的变量,shell 本身已经固定好了它的名字和作用。

内置变量含义
$?上一条命令执行后返回的状态,状态值为0表示执行正常,非0表示执行异常或错误
$0当前执行的程序或脚本名
$#脚本后面接的参数的个数
$*脚本后面的所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开
$@脚本后面的所有参数,参数是独立的,也是全部输出
$1-$9脚本后面的位置参数,$1 表示第一个位置参数,依次类推
( 10 ) − (10)- (10)(n)扩展位置参数,从第10个位置变量往后必须用{}括起来
$$当前所在进程的进程号,如 echo $$
$!后台运行的UI后一个进程号(当前终端)
!$调用最后一条命令历史中的参数
[root@yhm ~]# vim 1.sh
echo "\$0 = $0" 
echo "\$# = $#" 
echo "\$* = $*" 
echo "\$@ = $@" 
echo "\$1 = $1" 
echo "\$2 = $2" 
echo "\$3 = $3" 
echo "\$11 = ${11}" 
echo "\$12 = ${12}"
[root@yhm ~]# bash 1.sh a b c
$0 = 1.sh
$# = 3
$* = a b c
$@ = a b c
$1 = a
$2 = b
$3 = c
$11 = 
$12 = 
[root@yhm ~]# vim 1.sh
#!/bin/bash
for i in "$@"
do
        echo $i
done
echo "================"
for i in "$*"
do
        echo $i
done

[root@yhm ~]# bash 1.sh a b c
a
b
c
================
a b c

5、简单四则运算

算术运算:默认情况下,shell 就只能支持简单的整数运算
运算内容:加(+)、减(-)、乘(*)、除(/)、取余(%)

1、四则运算的符号

表达式举例结果
$(())echo $((1+1))2
$[]echo $[10-5]5
exprexpr 10/52
letn=1;let n+=1 等价于 let n=n+12

2、i++ 和 ++i 对变量的值的影响

[root@yhm ~]# i=1
[root@yhm ~]# let i++
[root@yhm ~]# echo $i
2
[root@yhm ~]# j=1
[root@yhm ~]# let ++j
[root@yhm ~]# echo $j
2

3、i++ 和 ++i 对表达式的值的影响

[root@yhm ~]# unset i j
[root@yhm ~]# i=1;j=1
[root@yhm ~]# let x=i++
[root@yhm ~]# let y=++j
[root@yhm ~]# echo $i
2
[root@yhm ~]# echo $j
2
[root@yhm ~]# echo $x
1
[root@yhm ~]# echo $y
2

6、数组

1、数组分类

普通数组:只能使用整数作为数组索引(元素的下标)
关联数组:可以使用字符串作为数组索引(元素的下标)

2、普通数组定义

1、一次赋一个值

数组名[索引下标]=值

[root@yhm ~]# a[0]=v1
[root@yhm ~]# a[1]=v2
[root@yhm ~]# a[2]=v3
2、一次赋多个值

数组名=(值1 值2 值3 …)

[root@yhm ~]# b=(var1 var2 var3)

将文件中的每一行赋值给 c 数组

[root@yhm ~]# cat 1.txt
abc
def
hij
[root@yhm ~]# c=(`cat 1.txt`)

将 ls 查询的结果赋值给 d 数组

[root@yhm ~]# d=(`ls /home/lib`)

不同数值类型的赋值

[root@yhm ~]# e=(tom linda jack "jerry")
[root@yhm ~]# f=(1 2 3 4 "hello world" [10]=shell)

3、普通数组的读取

1、获取数组里第一个元素
[root@yhm ~]# echo ${b[0]}
var1
2、获取数组里的所有元素
[root@yhm ~]# echo ${a[*]}
v1 v2 v3
3、获取数组里所有元素个数
[root@yhm ~]# echo ${#c[*]}
3
4、获取数组元素的索引下标
[root@yhm ~]# echo ${!e[@]}
0 1 2 3
5、访问指定的元素;1代表从下标为2的元素开始获取;4代表获取后面4个元素
[root@yhm ~]# echo ${f[@]:2:4}
3 4 hello world shell
6、查看普通数组信息
[root@yhm ~]# declare -a
declare -a BASH_ARGC=()
declare -a BASH_ARGV=()
declare -a BASH_COMPLETION_VERSINFO=([0]="2" [1]="7")
declare -a BASH_LINENO=()
declare -a BASH_SOURCE=()
declare -ar BASH_VERSINFO=([0]="4" [1]="4" [2]="20" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu")
declare -a DIRSTACK=()
declare -a FUNCNAME
declare -a GROUPS=()
declare -a PIPESTATUS=([0]="0")
declare -ax a=([0]="v1" [1]="v2" [2]="v3")
declare -a b=([0]="var1" [1]="var2" [2]="var3")
declare -a c=([0]="abc" [1]="def" [2]="hij")
declare -a d=([0]="compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm" [1]="database" [2]="elfutils-libelf-devel-0.189-2.fc39.x86_64.rpm" [3]="elfutils-libelf-devel-static-0.189-1.el8.x86_64.rpm" [4]="jdk1.8.0_151" [5]="MySQL" [6]="oracle")
declare -a e=([0]="tom" [1]="linda" [2]="jack" [3]="jerry")
declare -a f=([0]="1" [1]="2" [2]="3" [3]="4" [4]="hello world" [10]="shell")

4、关联数组定义

1、声明关联数组
[root@yhm ~]# declare -A a
[root@yhm ~]# declare -A b
[root@yhm ~]# declare -A c
2、数组赋值

1、一次赋一个值
数组名[索引]=变量值

[root@yhm ~]# a[linux]=one
[root@yhm ~]# a[java]=two
[root@yhm ~]# a[php]=three

2、一次赋多个值

[root@yhm ~]# b=([name]=tom [sno]=101 [sex]=男 [age]=18)

5、关联数组的读取

1、查看关联数组
[root@yhm ~]# declare -A
declare -A a=([java]="two" [php]="three" [linux]="one" )
declare -A b=([sno]="101" [name]="tom" [age]="18" [sex]="男" )
declare -A c
2、获取关联数组的值
[root@yhm ~]# echo ${a[linux]}
one
[root@yhm ~]# echo ${a[*]}
two three one
[root@yhm ~]# echo ${!a[*]}
java php linux
[root@yhm ~]# echo ${#c[*]}
0

7、其它变量定义

1、dirname 和 basename

dirname:取出一个目录下的目录
basename:取出一个目录下的文件

[root@yhm ~]# mkdir a
[root@yhm ~]# cd a
[root@yhm a]# touch a.txt
[root@yhm a]# A=/a/a.txt
[root@yhm a]# echo $A
/a/a.txt
[root@yhm a]# dirname $A
/a
[root@yhm a]# basename $A
a.txt

2、删除

符号释义
%从右往左去掉一个 /key/
%%从右到左最大去掉 /key/
#从左到右去掉一个 /key/
##从左到右最大去掉 /key/
[root@yhm a]# url=www.baidu.com
[root@yhm a]# echo ${#url}
13
[root@yhm a]# echo ${url#*.}
baidu.com
[root@yhm a]# echo ${url##*.}
com
[root@yhm a]# echo ${url%.*}
www.baidu
[root@yhm a]# echo ${url%%.*}
www

3、替换:/ 和 //

[root@yhm a]# echo ${url/b/t}
www.taidu.com
[root@yhm a]# echo ${url/w/t}
tww.baidu.com
[root@yhm a]# echo ${url//w//t}
/t/t/t.baidu.com
[root@yhm a]# echo ${url//w/t}
ttt.baidu.com

4、替代: - 、:- 、+ 、:+ 、?

1、${变量值-新的变量值} 或者 ${变量名=新的变量值}

变量没有被赋值,会使用“新的变量值”替代
变量被赋值(包括空值):不会被替代

[root@yhm ~]# echo ${abc-123}
123
[root@yhm ~]# abc=hello
[root@yhm ~]# echo ${abc-123}
hello
[root@yhm ~]# echo $abc
hello
[root@yhm ~]# b=
[root@yhm ~]# echo ${b-123}

2、${变量名:-新的变量值} 或者 ${变量名:=新的变量值}

变量没有被赋值或者赋空值:会使用“新的变量值”替代
变量被赋值:不会被替代

[root@yhm ~]# unset abc
[root@yhm ~]# echo ${abc:-123}
123
[root@yhm ~]# abc=hello
[root@yhm ~]# echo ${abc:-123}
hello
[root@yhm ~]# abc=
[root@yhm ~]# echo ${abc:-123}
123
3、${变量名+新的变量值}

变量没有被赋值:不会使用“新的变量值”替代
变量被赋过值或者被赋空值:会被替代

[root@yhm ~]# unset abc
[root@yhm ~]# echo ${abc+123}

[root@yhm ~]# abc=hello
[root@yhm ~]# echo ${abc+123}
123
[root@yhm ~]# abc=
[root@yhm ~]# echo ${abc+123}
123
4、${变量名:+新的变量值}

变量没有被赋过值或被赋空值:不会使用“新的变量值”替代
变量被赋过值:会被替代

[root@yhm ~]# echo ${abc:+123}

[root@yhm ~]# abc=hello
[root@yhm ~]# echo ${abc:+123}
123
[root@yhm ~]# abc=
[root@yhm ~]# echo ${abc:+123}

5、${变量名?新的变量值}

变量没有被赋值:提示信息
变量被赋值(包括空值):不会使用“新的变量值”替代

[root@yhm ~]# unset abc
[root@yhm ~]# echo ${abc?123}
-bash: abc: 123
[root@yhm ~]# abc=hello
[root@yhm ~]# echo ${abc?123}
hello
[root@yhm ~]# abc=
[root@yhm ~]# echo ${abc?123}

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

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

相关文章

学习HCIP的day.05

目录 十、ospf扩展配置&#xff1a; 1、认证 2、沉默接口 3、加快收敛 4、缺省路由 查看OSPF路由&#xff1b;显示本地发出和学习到的OSPF路由条目 <r10>display ospf routing 十、ospf扩展配置&#xff1a; 1、认证 直连的邻居或邻接之间&#xff0c;配置身…

【并发编程系列 — 线程基础】

Java并发是Java语言中非常重要的一个话题&#xff0c;也是面试和实际应用中最常接触到的。作为JAVA工程师&#xff0c;掌握并发编程知识是非常重要的。在多核CPU的环境下&#xff0c;使用多线程并发执行任务可以显著提高程序的执行效率&#xff0c;从而提高系统的性能。 目录 …

6.事件系统

事件 事件的传递 新建Widget项目myevent&#xff0c;类名WIdget不变 新建C类如下&#xff1a; 粘贴代码 1myevent运行结果&#xff1a; 输入任意字符时&#xff0c;qDebug显示如下&#xff0c;但框内无法显示输入的字符 //mylineedit.cpp中void MyLineEdit::keyPressEven…

[Docker]Docker命令

Docker常用命令 帮助命令 docker version #版本信息 docker info #详细信息 docker 命令 --help #万能命令镜像命令&#xff1a; docker images #展示所有镜像 docker search docker pull 下载镜像 docker rmi 删除镜像 &#xff08;remove images) 容器命令…

数据分析---Python科学计算库-Numpy学习(一)

一&#xff0c;简介 1.1什么是数据分析 数据分析是指通过使用各种统计学、计算机科学和数学技术&#xff0c;对收集来的数据进行处理、整理、解释和呈现&#xff0c;从而提取出数据中有用的信息和洞察&#xff0c;并帮助做出更明智的决策。数据分析可以应用于各种不同的领域和…

MapReduce源码解读-2

MapReduce源码解读-2 MapReduceInputFormat类getSplitsCreateRecordReader Mapper类OutputCollectorMapOutputBufferPartitioner 分区环形缓冲区 Circular buffer初始化 Spill、Sort溢写、排序Merge 合并combiner 规约 Reduce阶段ReduceTask第一层调用 ReduceTask.run -shuffle…

【力扣】刷题+剑指offer第二版

文章目录 题目收藏不含重复字符的最长子串最长公共子串 剑指 Offer剑指 Offer 05. 替换空格剑指 Offer 03. 数组中重复的数字剑指 Offer 04. 二维数组中的查找剑指 Offer 09. 用两个栈实现队列剑指 Offer 07. 重建二叉树剑指 Offer 06. 从尾到头打印链表剑指 Offer 11. 旋转数组…

【大数据之Hadoop】二十八、生产调优-HDFS集群扩容及缩容

增加或缩减服务器&#xff0c;注意不允许白名单和黑名单同时出现同一个主机。 1 服役新服务器 原有数据节点不能满足数据存储需求时&#xff0c;需要在原有集群的基础上动态增加节点&#xff0c;即动态增加服务器&#xff0c;增加服务器的同时不需要重启集群。 hadoop完全分布…

JVM相关知识点

java内存区域 线程私有的&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享的&#xff1a; 堆方法区直接内存 程序计数器&#xff1a;记录当前线程执行的位置 当线程切换后能够知道该线程上次运行到哪了 java虚拟机栈&#xff1a; 方法调用的数据通过栈进行传递&#…

一篇文章带你重新回溯单链表的所有

&#x1f349;博客主页&#xff1a;阿博历练记 &#x1f4d7;文章专栏&#xff1a;数据结构与算法 &#x1f69a;代码仓库&#xff1a;阿博编程日记 &#x1f339;欢迎关注&#xff1a;欢迎友友们订阅收藏关注哦 文章目录 &#x1f34c;前言&#x1f4bb;无头单向非循环链表&am…

SSM(Spring、SpringMVC、MyBatis)整合、配置

SpringMVC是一个表述层(前台的页面和后台的servlet)框架&#xff0c;处理浏览器发送到服务器的请求&#xff0c;并且将一些数据响应到浏览器 MyBatis是一个持久层框架&#xff0c;帮助我们连接数据库&#xff0c;访问数据库&#xff0c;操作数据库中的数据 Spring是一个整合型框…

毕业论文相关

毕业论文参考文献和Word保存 一、Word中出现[7-9]多个文献的引用 在正文中选中参考文献角标&#xff0c;右击选择“切换域代码”&#xff0c;参考文献角标[7][8][9]变为{ REF _Ref98345319 \r \h * MERGEFORMAT }{ REF _Ref98345321 \r \h * MERGEFORMAT }{ REF _Ref99390603…

AQS独占锁之ReentrantLock源码调试(JDK8)

前言&#xff1a; 为什么需要学习ReentrantLock? 目前项目开发中使用到的几乎都是分布式锁&#xff0c;平时可能很少用到java自带的锁&#xff1b; 但实际在我们java的源码中&#xff0c;随处可见需要使用锁来保证线程安全&#xff0c;所以还是有必要学习下ReentrantLock。 1…

7.分区表和分桶表

1.创建分区表 create table dept_partition(deptno int,dname string,loc int ) partitioned by (dt string) // 分区字段(date) row format delimited fields terminated by \t; 2.增删改查操作 2.1 插入数据 1&#xff09;导入本地数据 -- 创建一个名字为dt2022-06-14的…

R语言 | 输入与输出

目录 一、认识文件夹 1.1 getwd()函数 1.2 setwd()函数 1.3 file.path()函数 1.4 dir()函数 1.5 list.files()函数 1.6 file.exists()函数 1.7 file.rename()函数 1.8 file.create()函数 1.9 file.copy()函数 ​1.10 file.remove()函数 二、数据输出&#xff1a;ca…

单片机c51中断 — 中断扫描法行列式键盘

项目文件 文件 关于项目的内容知识点可以见专栏单片机原理及应用 的第五章&#xff0c;中断 在第4章中已介绍过行列式键盘的工作原理&#xff0c;并编写了相应的键盘扫描程序。但应注意的是&#xff0c;在单片机应用系统中&#xff0c;键盘扫描只是 CPU 工作的内容之一。CPU …

一文理清 TiDB 与 MySQL 中的常用字符集及排序规则

1. 字符集&#xff08;character set&#xff09; 1.1. 字符集与编码规则 字符集&#xff08;character set&#xff09;即为众多字符的集合。字符集为每个字符分配一个唯一的 ID&#xff0c;称为 “Code Point&#xff08;码点&#xff09;”。编码规则是将 Code Point 转换…

商户查询的缓存——缓存击穿问题

缓存击穿问题也叫热点key问题&#xff0c;就是一个被高并发访问并且缓存重建业务比较复杂的key突然失效了&#xff0c;无数的请求访问会在瞬间给数据库带来巨大的冲击 常见的解决方案有两种&#xff1a; 互斥锁&#xff08;高并发时性能较差&#xff09; 逻辑过期 基于互斥锁方…

ASN.1-PKCS10-x509

在国际标准ITU-T X.690 《Information technology – ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)》中定义了ASN.1编码规则。对于一般数据类型&#xff08;比如Integer、octe…

【软件工程】自动化测试保证卓越软件工程能力(2)

本次内容我们抽象一个待测试的目标软件产品&#xff0c;产品是基于web开发的。 自动化平台不是独立存在的&#xff0c;必然有一个目标待测试产品&#xff0c;用自动化测试来反映产品功能是否还是好的。 产品抽象v1 第一个版本&#xff0c;使用者&#xff08;USER&#xff09;发…