bash简介~变量+判断+运算

bash基本特性

^c   			终止前台运行的程序
^z	  			将前台运行的程序挂起到后台
^d   			退出 等价exit
^l   			清屏 
^a |home  	光标移到命令行的最前端
^e |end  	光标移到命令行的后端
^u   			删除光标前所有字符
^k   			删除光标后所有字符
^r	 			搜索历史命令
*:	匹配0或多个任意字符
?:	匹配任意单个字符
[list]:	匹配[list]中的任意单个字符
[!list]: 匹配除list中的任意单个字符
{string1,string2,...}:匹配string1,string2或更多字符串

举例:
touch file{1..3}
touch file{1..13}.jpg
[root@linux ~]# ls file*
file1       file12.jpg  file2      file3.jpg  file6.jpg  file9.jpg

[root@linux ~]#  ls *.jpg
file10.jpg  file12.jpg  file1.jpg  file3.jpg  file5.jpg  file7.jpg  file9.jpg

[root@linux ~]# ll file?
-rw-r--r--. 1 root root 16 Jan 29 22:11 file1
-rw-r--r--. 1 root root  0 Jan 29 22:11 file2
-rw-r--r--. 1 root root  0 Jan 29 22:11 file3

[root@linux ~]# ll file?.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file2.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg

[root@linux ~]# ll file??.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file10.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file11.jpg

[root@linux ~]# ll file[1023].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file2.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg

[root@linux ~]# ll file[0-13].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg

[root@linux ~]# ll file1[0-9].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file10.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file11.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file12.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file13.jpg

[root@linux ~]# ll file[0-9].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file2.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file4.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file5.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file6.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file7.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file8.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file9.jpg

[root@linux ~]# ll file?[1-13].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file11.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file13.jpg.

[root@linux ~]# ll file[1,2,3,10,11,12].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file2.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg

[root@linux ~]# ll file[1,2,3,10,11,12].jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file2.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg

[root@linux ~]# ll file1{11,10,1,2,3}.jpg
ls: cannot access file111.jpg: No such file or directory
ls: cannot access file110.jpg: No such file or directory
-rw-r--r--. 1 root root 0 Jan 29 22:12 file11.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file12.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file13.jpg

[root@linux ~]# ll file{1..10}.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file10.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file1.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file2.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file3.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file4.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file5.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file6.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file7.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file8.jpg
-rw-r--r--. 1 root root 0 Jan 29 22:12 file9.jpg

[root@linux ~]# ll file{1...10}.jpg
ls: cannot access file{1...10}.jpg: No such file or directory
[root@linux ~]# 

bash中的引号(重点)

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

[root@linux ~]#  echo "$(hostname)"
linux
[root@linux ~]#  echo '$(hostname)'
$(hostname)
[root@linux ~]# echo "hello world"
hello world
[root@linux ~]#  echo 'hello world'
hello world


[root@linux ~]#  echo $(date +%F)
2023-01-30
[root@linux ~]# echo `echo $(date +%F)`
2023-01-30
[root@linux ~]#  echo `date +%F`
2023-01-30
[root@linux ~]#  echo `echo `date +%F``
date +%F
[root@linux ~]#  echo $(echo `date +%F`)
2023-01-30
[root@linux ~]# 

变量的定义

本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。
环境变量:当前进程有效,并且能够被子进程调用
1)查看当前用户的环境变量 env
2)查询当前用户的所有变量(临时变量与环境变量) **set **
3)**export //将当前变量变成环境变量 *

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

永久生效:
vim /etc/profile 或者 ~/.bashrc
export A=hello
或者
A=hello
export A

说明:系统中有一个变量PATH,环境变量
export PATH=/usr/local/mysql/bin:$PATH

全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用.

$HOME/.bashrc     		当前用户的bash信息(aliase、umask等)
$HOME/.bash_profile  	当前用户的环境变量()
oracle——>oracle用户——>$oracle/.bash_profile——>export home_install=/u01/app/xxx

$HOME/.bash_logout  		每个用户退出当前shell时最后读取的文件

/etc/bashrc             使用bash shell用户全局变量
grep --color=auto
umask

/etc/profile   		   系统和每个用户的环境变量信息

mycat_home=/usr/local/mycat/bin
export mycat_home
执行mycat命令
# mycat
$ mycat

用户登录系统读取相关文件的顺序:
/etc/profile——>$HOME/.bash_profile——>$HOME/.bashrc——>/etc/bashrc——>$HOME/.bash_logout

source /etc/bashrc

系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用.

$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
 若退出状态值为0,表示命令运行成功
 若退出状态值为127,表示command not found
 若退出状态值为126,表示找到了该命令但无法执行(权限不够)
 若退出状态值为1&2,表示没有那个文件或目录
 
$$:当前所在进程的进程号     echo $$   eg:kill -9 `echo $$`  = exit   退出当前会话
$!:后台运行的最后一个进程号  (当前终端)  # gedit &
!$	调用最后一条命令历史中的参数
!!	调用最后一条命令历史


$#:脚本后面接的参数的个数
$*:脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开
$@: 脚本后面所有参数,参数是独立的,也是全部输出

$0:当前执行的进程/程序名  echo $0	    
$1~$9 位置参数变量
${10}~${n} 扩展位置参数变量  第10个位置变量必须用{}大括号括起来
./1.sh a b c

[root@MissHou shell01]# cat 2.sh 
#!/bin/bash
#xxxx
echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$1 = $1" 
echo "\$2 = $2" 
echo "\$3 = $3" 
echo "\$11 = ${11}" 
echo "\$12 = ${12}" 

了解$*$@的区别:
$*	:表示将变量看成一个整体
$@	:表示变量是独立的

#!/bin/bash
for i in "$@"
do
echo $i
done

echo "======我是分割线======="

for i in "$*"
do
echo $i
done

[root@linux ~]# bash 1.sh a b c
a
b
c
======我是分割线=======
a b c
[root@linux ~]# 

变量的意义

1)如果某个内容需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容。这样在修改内容的时候,仅仅需要修改变量的值。
2)在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量

 默认情况下,shell里定义的变量是不分类型的,可以给变量赋与任何类型的值;等号两边不能有空格,对于有空格的字符串做为赋值时,要用引号引起来
变量名=变量值

2. 变量的获取方式:	$变量名     ${变量名}	
[root@linux ~]# a=12345678
[root@linux ~]#  echo $a
12345678
[root@linux ~]# echo ${a}   a表示变量名;2表示从第3个字符开始;3表示后面3个字符
12345678
[root@linux ~]# echo ${a:2:3}
345

如果获取变量的全部两个都可以;如果获取变量的某一部分,用${}

3. 取消变量:     unset  变量名

4. 变量名区分大小写,同名称但大小写不同的变量名是不同的变量
5. 变量名可以是字母或数字或下划线,但是不能以数字开头或者特殊字符
6. 命令的执行结果可以保存到变量

[root@linux ~]# kernel=`uname -r`
[root@linux ~]# echo $kernel
3.10.0-1160.el7.x86_64
[root@linux ~]# name=$(uname -n)
[root@linux ~]# echo $name
linux

7. 有类型变量 declare
-i 将变量看成整数 
-r 使变量只读  readonly
-x 标记变量通过环境导出  export
-a	指定为索引数组(普通数组);查看普通数组
-A 指定为关联数组;查看关联数组

[root@linux ~]# a=10
[root@linux ~]# b=20
[root@linux ~]# echo $a+$b
10+20
[root@linux ~]# declare -i a=2
[root@linux ~]# declare -i b=4
[root@linux ~]# declare -i c=$a+$b
[root@linux ~]# echo $c
6

[root@linux ~]# AAAA=hello
[root@linux ~]# export AAAA
[root@linux ~]# env|grep AAAA
AAAA=hello
[root@linux ~]# declare -x BBBB=hello
[root@linux ~]#  env|grep BBBB
BBBB=hello

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

普通数组定义:用括号来表示数组,数组元素(变量)用“空格”符号分割开。定义数组的一般形式为:
一次赋一个值:
变量名=变量值
array[0]=v1
array[1]=v2
array[3]=v3
一次赋多个值:
array=(var1 var2 var3 var4)
array1=(`cat /etc/passwd`)			//将文件中每一行赋值给array1数组
array2=(`ls /root`)
array3=(harry amy jack "Miss Hou")
array4=(1 2 3 4 "hello world" [10]=linux)

读取数组:
${array[i]}  i表示元素的下标
使用@ 或 * 可以获取数组中的所有元素:
获取第一个元素
echo ${array[0]}
echo ${array[*]}			获取数组里的所有元素
echo ${#array[*]}			获取数组里所有元素个数
echo ${!array[@]}    	获取数组元素的索引下标
echo ${array[@]:1:2}    访问指定的元素;1代表从下标为1的元素开始获取;2代表获取后面几个元素

[root@linux ~]# array[0]=var1
[root@linux ~]# array[1]=var2
[root@linux ~]# array[2]=var3
[root@linux ~]# array1=(uu1 uu2 uu3 uu4)
[root@linux ~]# ls
1.sh
[root@linux ~]# array2=(`ls ./`)
[root@linux ~]# array3=(jack harry "Miss Hou" [5]=tom)

查看普通数组信息:
[root@linux ~]# declare -a
declare -a array='([0]="var1" [1]="var2" [2]="var3")'
declare -a array1='([0]="uu1" [1]="uu2" [2]="uu3" [3]="uu4")'
declare -a array2='([0]="1.sh")'
declare -a array3='([0]="jack" [1]="harry" [2]="Miss Hou" [5]="tom")'

[root@linux ~]#  echo ${array[*]}
var1 var2 var3
[root@linux ~]# echo ${array[@]}
var1 var2 var3
[root@linux ~]#  echo ${array[2]}
var3
[root@linux ~]# echo ${array2[@]}
1.sh
[root@linux ~]#  echo ${array2[3]}

[root@linux ~]# echo ${array2[*]:2:2}

[root@linux ~]# echo ${#array2[*]}
1
[root@linux ~]# echo ${!array2[*]}
0
[root@linux ~]# echo ${!array3[*]}
0 1 2 5

关联数组定义:
首先声明关联数组
[root@linux ~]# declare -A asso_array1
[root@linux ~]# declare -A asso_array2
[root@linux ~]# declare -A asso_array3

数组赋值:
一次赋一个值:
数组名[索引|下标]=变量值

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

一次赋多个值:
[root@linux ~]# asso_array2=([name1]=harry [name2]=jack [name3]=amy [name4]="Miss Hou")
查看关联数组:

[root@linux ~]# declare -A
declare -A BASH_ALIASES='()'
declare -A BASH_CMDS='()'
declare -A asso_array1='([php]="three" [java]="two" [linux]="one" )'
declare -A asso_array2='([name3]="amy" [name2]="jack" [name1]="harry" [name4]="Miss Hou" )'
declare -A asso_array3='()'
[root@linux ~]# echo ${asso_array1[linux]}
one
[root@linux ~]# echo ${asso_array1[php]}
three
[root@linux ~]# echo ${asso_array1[*]}
three two one
[root@linux ~]# echo ${!asso_array1[*]}
php java linux
[root@linux ~]# echo ${#asso_array1[*]}
3
[root@linux ~]# echo ${#asso_array2[*]}
4
[root@linux ~]#  echo ${!asso_array2[*]}
name3 name2 name1 name4

9. 交互式定义变量的值 read    主要用于让用户去定义变量值
-p 提示信息
-n 字符数 (限制变量值的字符数)
-s 不显示   
-t 超时(默认单位秒)(限制用户输入变量值的超时时间) 

[root@linux ~]# cat 1.txt 
10.1.1.1 255.255.255.0

[root@linux ~]# read -p "Input your IP and Netmask:" ip mask < 1.txt 
[root@linux ~]# echo $ip
10.1.1.1
[root@linux ~]#  echo $mask
255.255.255.0

10. 其他变量(扩展)
1)取出一个目录下的目录和文件:dirname和 basename 
2)变量"内容"的删除和替换
一个“%”代表从右往左去掉一个/key/
两个“%%”代表从右往左最大去掉/key/
一个“#”代表从左往右去掉一个/key/
两个“##”代表从左往右最大去掉/key/

# A=/root/Desktop/shell/mem.txt 
# echo $A
/root/Desktop/shell/mem.txt
# dirname $A   取出目录
/root/Desktop/shell
# basename $A  取出文件
mem.txt

# url=www.taobao.com
# echo ${#url}		     获取变量的长度
[root@linux ~]# url=www.taobao.com
[root@linux ~]# echo ${#url}
14
[root@linux ~]# echo ${url#*.}
taobao.com
[root@linux ~]# echo ${url##*.}
com
[root@linux ~]# echo ${url%.*}
www.taobao
[root@linux ~]# echo ${url%%.*}
www

简单的四则运算

+ - * /  %(取模,求余数)
Bash shell 的算术运算有四种方式:
1. 使用 $(( ))
2. 使用$[ ]
3. 使用 expr 外部程式
4. 使用let 命令

注意:
n=1
let n+=1  等价于let n=n+1

[root@server shell01]# echo 1+1.5|bc
2.5


i++ 和 ++i (了解)
对变量的值的影响:
[root@node1 ~]# i=1
[root@node1 ~]# let i++
[root@node1 ~]# echo $i
2
[root@node1 ~]# j=1
[root@node1 ~]# let ++j
[root@node1 ~]# echo $j
2

对表达式的值的影响:
[root@node1 ~]# unset i j
[root@node1 ~]# i=1;j=1
[root@node1 ~]# let x=i++         先赋值,再运算
[root@node1 ~]# let y=++j         先运算,再赋值
[root@node1 ~]# echo $i
2
[root@node1 ~]# echo $j
2
[root@node1 ~]# echo $x
1
[root@node1 ~]# echo $y
2

总结:
$(())  $[]
expr 注意空格,*要进行转义 \

let n+=1  等价   let n=n+1
let n=n**5		n有初值,然后求次幂

i++	++i	
对变量本身没有影响(自己+1);
表达式中有影响;i++ 先赋值再运算  ++i先运算再赋值
let x=i++   let x=++i

条件判断

语法格式
- 格式1: ==**test**== 条件表达式
- 格式2: **[** 条件表达式 ]
- 格式3: **[[** 条件表达式 ]]  支持正则 =~

**与文件存在与否的判断**
-e	是否存在   不管是文件还是目录,只要存在,条件就成立
-f	是否为普通文件
-d	是否为目录
-S	socket
-p	pipe
-c	character
-b	block
-L	软link

三种语法格式:
test -e file					只要文件存在条件为真
[ -d /shell01/dir1 ]		 	判断目录是否存在,存在条件为真
[ ! -d /shell01/dir1 ]		判断目录是否存在,不存在条件为真
[[ -f /shell01/1.sh ]]		判断文件是否存在,并且是一个普通的文件

-s 判断文件是否有内容(大小),非空文件条件满足
说明:-s表示非空,! -s 表示空文件
说明:1.sh文件里有内容的。
[root@server shell01]# test -s 1.sh
[root@server shell01]# echo $?
0
[root@server shell01]# touch aaa
[root@server shell01]# cat aaa
[root@server shell01]# test -s aaa
[root@server shell01]# echo $?
1
[root@server shell01]# test ! -s aaa
[root@server shell01]# echo $?
0
[root@server shell01]# test ! -s 1.sh
[root@server shell01]# echo $?
1

文件权限相关的判断

-r	当前用户对其是否可读
-w	当前用户对其是否可写
-x	当前用户对其是否可执行
-u	是否有suid
-g	是否sgid
-k	是否有t位

两个文件的比较判断

file1 -nt  file2	比较file1是否比file2新	
file1 -ot  file2 	比较file1是否比file2旧
file1 -ef  file2	比较是否为同一个文件,或者用于判断硬连接,是否指向同一个inode

test file1 -nt file2	
[ file1 -ot file2 ]

整数之间的判断

-eq	相等
-ne	不等
-gt	大于
-lt	小于
-ge   大于等于
-le	小于等于

字符串之间的判断

-z  是否为空字符串   		字符串长度为0,就成立
-n  是否为非空字符串    	只要字符串非空,就是成立
string1 = string2 		是否相等
string1 != string2 		不等

[root@server shell01]# AAA=hello
[root@server shell01]# BBB=world
[root@server shell01]# test -z $AAA
[root@server shell01]# echo $?
1
[root@server shell01]# test -n $AAA
[root@server shell01]# echo $?
0

[root@server shell01]# [ $AAA = $BBB ]
[root@server shell01]# echo $?
1
[root@server shell01]# [ $AAA != $BBB ]
[root@server shell01]# echo $?
0

多重条件判断

逻辑判断符号:
 -a&&  	(and 逻辑与) 		两个条件同时满足,整个大条件为真
 -o||	(or 逻辑或)		  	两个条件满足任意一个,整个大条件为真

 
[ 1 -eq 1 -a 1 -ne 0 ]				整个表达式为真
[ 1 -eq 1 ] && [ 1 -ne 0 ]			


[ 1 -eq 1 -o 1 -ne 1 ]				整个表达式为真
[ 1 -eq 1 ] || [ 1 -ne 1 ]

[root@linux ~]# [ 1 -eq 0 ] && echo true || echo false
false
[root@linux ~]#  [ 1 -eq 1 ] && echo true || echo false
true


&&:前面的表达式为真
||:前面的表达式为假



总结:
1; && ||都可以用来分割命令或者表达式
2; 完全不考虑前面的语句是否正确执行,都会执行;号后面的内容
3&& 需要考虑&&前面的语句的正确性,前面语句正确执行才会执行&&后的内容;反之亦然
make && make install
4|| 需要考虑||前面的语句的非正确性,前面语句执行错误才会执行||后的内容;反之亦然
5、如果&&||一起出现,从左往右依次看,按照以上原则

案例:

[root@linux ~]# [ $(id -u) -eq 0 ] && echo "the user is admin"
the user is admin
[root@linux ~]#  [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin"
the user is admin
[root@linux ~]# [ $(id -u) -ne 0 ] && echo "the user is not admin"

[root@linux ~]# su - oracle
Last login: Mon Jan 30 02:46:23 EST 2023 on pts/1
[oracle@linux ~]$ [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
this is not admin


 ((1==2));echo $?
 ((1<2));echo $?
 ((2>=1));echo $?
 ((2!=1));echo $?
 ((`id -u`==0));echo $?
 
 ((a=123));echo $a
 unset a
((a==123));echo $?
 


字符串比较:
注意:双引号引起来,看作一个整体;===[ 字符串 ] 比较中都表示判断
a='hello world';b=world
[ $a = $b ];echo $?
[ "$a" = "$b" ];echo $?
[ "$a" != "$b" ];echo $?
[ "$a" !== "$b" ];echo $?        错误
[ "$a" == "$b" ];echo $?
test "$a" != "$b";echo $?

[oracle@linux ~]$ a='hello world';b=world
[oracle@linux ~]$ [ $a = $b ];echo $?
-bash: [: too many arguments
2
[oracle@linux ~]$ [ "$a" = "$b" ];echo $?
1
[oracle@linux ~]$ [ "$a" != "$b" ];echo $?
0
[oracle@linux ~]$ [ "$a" !== "$b" ];echo $?
-bash: [: !==: binary operator expected
2
[oracle@linux ~]$ [ "$a" == "$b" ];echo $?
1
[oracle@linux ~]$ test "$a" != "$b";echo $?
0


[ ][[ ]] 有什么区别?

[oracle@linux ~]$  a=
[oracle@linux ~]$  test -z $a;echo $?
0
[oracle@linux ~]$ a=hello
[oracle@linux ~]$ test -z $a;echo $?
1
[oracle@linux ~]$  test -n $a;echo $?
0
[oracle@linux ~]$  test -n "$a";echo $?
0


# [ '' = $a ];echo $?
-bash: [: : unary operator expected
2
# [[ '' = $a ]];echo $?
0


 [ 1 -eq 0 -a 1 -ne 0 ];echo $?
 [ 1 -eq 0 && 1 -ne 0 ];echo $?
 [[ 1 -eq 0 && 1 -ne 0 ]];echo $?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韶博雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值