1、 SHELL 变量及运用
(1)shell变量
变量是shell传递数据的一种方法。变量是用来代表每个值的符号名,通过变量,可以在内存中存储数据,也可以在脚本执行中进行修改和访问存储的数据。
(2)变量设置规则
A、变量名称通常是大写字母,它可以由数字、字母(大小写)和下划线_组成。变量名区分大小写;变量名称不能以数字开头;
B、等号 = 用于为变量分配值,在使用过程中等号两边不能有空格;
C、变量存储的数据类型是整数值和字符串值;
D、在对变量赋于字符串值时,建议大家用引号将其括起来。因为如果字符串中存在空格隔符号。需要使用单引号或双引号;
E、要对变量进行调用,可以在变量名称前加美元符号$;
F、如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用${变量名}包含;
(3)变量分类
按照变量的作用可以分成4类:
A、用户自定义变量;
B、环境变量:这种变量中主要保存的是和系统操作环境相关的数据;
C、位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的;
E、预定义变量:是 Bash 中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
按照变量作用范围分为2类:
A、局部变量是 shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。
B、全局变量是环境变量,其值不随 shell 脚本的执行结束而消失。
(4)用户自定义变量
变量名命名规则:由字母或下划线打头,不允许数字开头,后面由字母、数字或下划线组成,并且大小写字母意义不同。在使用变量时,在变量名前加$。
Eg1:给变量test赋值
Eg2:变量值叠加,使用${}
$name 是${name}的简化版本,但是在某些情况下,还必须使用花括号引起的方式来消除歧义并避免意外的结果。
(5)命令替换
Date命令:
date 命令是显示或设置系统时间与日期。
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
<+时间日期格式>:指定显示时,使用特定的日期时间格式 。
实例:
A、 显示当前时间年、月、日
B、 显示当前时间年、月
#显示日期及时间
#显示日期及时间,使用/分割
#显示日期及时间,使用-进行分割(备份一般使用该方式)
Date命令加减操作:
#显示当前时间(年、月、日)
#显示明天的日期
#显示昨天的日期
#显示上一月的日期
#显示下一月的日期
#显示前一年的日期
#显示下一年的日期
设定时间:
#设置成20201020,这样会把具体时间设置成空 00:00:00
#设置具体时间,不会对日期做更改
#设置全部时间
A、命令中调用date命令
(6)命令的嵌套使用,使用$( $( ))
(7)shell 中单引号和双引号区别
‘’ 在单引号中所有的字符包括特殊字符($,'',`和\)都将解释成字符本身而成为普通字符。
“” 在双引号中,除了$, '', `和\以外所有的字符都解释成字符本身,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当做是变量引用。
Eg:\转义符作用
A、双引号与单引号区别
注:单引号之间的内容原封不动赋值给变量,双引号之间的内容如有特殊符号会保留它的特殊含义。
删除变量:
(8)环境变量
在 bash shell 中,变量分为两类:全局变量和局部变量
全局变量:对于shell会话和所有的子shell都是可见的
局部变量:它只在自己的进程当中使用
A、局部变量
#执行1.sh 时,会使用另一个bash去执行,就访问不到$test的值
B、env 命令查看所全局变量
C、使用 export 把这个局部变量输出为全局变量
D、让变量永久生效,可以把定义好的变量写入配置文件
当登录系统或新开启一个 ssh 连接启动 bash 进程时,一定会加载这 4 个配置文件:
#系统全局环境和登录系统的一些配置
#shell 全局自义配置文件,用于自定义 shell
#用于单独自定义某个用户的 bash
#用户单独自定义某个用户的系统环境
(9)shell位置变量
Shell解释执行用户的命令时,将命令行的第一个字符作为命令名,而其它字符作为参数。
$0 获取当前执行shell脚本的文件文件名,包括脚本路径,命令本身
$n 获取当前脚本的第n个参数 n=1,2.....n 当 n 大于 9 时 用${10}表示
Eg:
(10)特殊变量
有些变量是一开始执行 Script 脚本时就会设定,且不能被修改,但我们不叫它只读的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些特殊变量:
Eg: