1、SHELL 变量及运用
(1)shell变量
变量是shell传递数据的一种方法。变量是用来代表每个值的符号名,通过变量,可以在内存中存储数据,也可以在脚本执行中进行修改和访问存储的数据。
(2)变量设置规则
A、变量名称通常是大写字母,它可以由数字、字母(大小写)和下划线_组成。变量名区分大小写;变量名称不能以数字开头;
B、等号 = 用于为变量分配值,在使用过程中等号两边不能有空格;
C、变量存储的数据类型是整数值和字符串值;
D、在对变量赋于字符串值时,建议大家用引号将其括起来。因为如果字符串中存在空格隔符号。需要使用单引号或双引号;
E、要对变量进行调用,可以在变量名称前加美元符号
;
F
、
如
果
需
要
增
加
变
量
的
值
,
那
么
可
以
进
行
变
量
值
的
叠
加
。
不
过
变
量
需
要
用
双
引
号
包
含
“
; F、如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“
;F、如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“变量名”或用
变
量
名
包
含
;
(
3
)
变
量
分
类
按
照
变
量
的
作
用
可
以
分
成
4
类
:
A
、
用
户
自
定
义
变
量
;
B
、
环
境
变
量
:
这
种
变
量
中
主
要
保
存
的
是
和
系
统
操
作
环
境
相
关
的
数
据
;
C
、
位
置
参
数
变
量
:
这
种
变
量
主
要
是
用
来
向
脚
本
当
中
传
递
参
数
或
数
据
的
,
变
量
名
不
能
自
定
义
,
变
量
作
用
是
固
定
的
;
E
、
预
定
义
变
量
:
是
B
a
s
h
中
已
经
定
义
好
的
变
量
,
变
量
名
不
能
自
定
义
,
变
量
作
用
也
是
固
定
的
。
按
照
变
量
作
用
范
围
分
为
2
类
:
A
、
局
部
变
量
是
s
h
e
l
l
程
序
内
部
定
义
的
,
其
使
用
范
围
仅
限
于
定
义
它
的
程
序
,
对
其
它
程
序
不
可
见
。
包
括
:
用
户
自
定
义
变
量
、
位
置
变
量
和
预
定
义
变
量
。
B
、
全
局
变
量
是
环
境
变
量
,
其
值
不
随
s
h
e
l
l
脚
本
的
执
行
结
束
而
消
失
。
(
4
)
用
户
自
定
义
变
量
变
量
名
命
名
规
则
:
由
字
母
或
下
划
线
打
头
,
不
允
许
数
字
开
头
,
后
面
由
字
母
、
数
字
或
下
划
线
组
成
,
并
且
大
小
写
字
母
意
义
不
同
。
在
使
用
变
量
时
,
在
变
量
名
前
加
{变量名}包含; (3)变量分类 按照变量的作用可以分成4类: A、用户自定义变量; B、环境变量:这种变量中主要保存的是和系统操作环境相关的数据; C、位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的; E、预定义变量:是 Bash 中已经定义好的变量,变量名不能自定义,变量作用也是固定的。 按照变量作用范围分为2类: A、局部变量是 shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。 B、全局变量是环境变量,其值不随 shell 脚本的执行结束而消失。 (4)用户自定义变量 变量名命名规则:由字母或下划线打头,不允许数字开头,后面由字母、数字或下划线组成,并且大小写字母意义不同。在使用变量时,在变量名前加
变量名包含;(3)变量分类按照变量的作用可以分成4类:A、用户自定义变量;B、环境变量:这种变量中主要保存的是和系统操作环境相关的数据;C、位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的;E、预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。按照变量作用范围分为2类:A、局部变量是shell程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。B、全局变量是环境变量,其值不随shell脚本的执行结束而消失。(4)用户自定义变量变量名命名规则:由字母或下划线打头,不允许数字开头,后面由字母、数字或下划线组成,并且大小写字母意义不同。在使用变量时,在变量名前加。
Eg1:给变量test赋值
[root@test65-1 ~]# test=1
[root@test65-1 ~]# echo $test
1
[root@test65-1 ~]#
Eg2:变量值叠加,使用${}
n
a
m
e
是
name 是
name是{name}的简化版本,但是在某些情况下,还必须使用花括号引起的方式来消除歧义并避免意外的结果。
[root@test65-1 ~]# test1=access
[root@test65-1 ~]# echo test1
test1
[root@test65-1 ~]# echo $test1
access
[root@test65-1 ~]# echo $test1.log
access.log
[root@test65-1 ~]#
(5)命令替换
Date命令:
date 命令是显示或设置系统时间与日期。
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
<+时间日期格式>:指定显示时,使用特定的日期时间格式。
实例:
A、显示当前时间年、月、日
[root@test65-1 ~]# date +"%Y-%m-%d"
2020-10-12
B、显示当前时间年、月
[root@test65-1 ~]# date +"%Y-%m"
2020-10
#显示日期及时间
date +"%Y-%m-%d %H:%M.%S"
#显示日期及时间,使用/分割
date +"%Y/%m/%d %H/%M/%S"
#显示日期及时间,使用-进行分割(备份一般使用该方式)
date +"%Y-%m-%d-%H-%M-%S"
Date命令加减操作:
#显示当前时间(年、月、日)
date +"%Y%m%d"
#显示明天的日期
date -d "+1 day" +%Y%m%d
#显示昨天的日期
date -d "-1 day" +%Y%m%d
#显示上一月的日期
date -d "-1 month" +%Y%m%d
#显示下一月的日期
date -d "+1 month" +%Y%m%d
#显示前一年的日期
date -d "-1 year" +%Y%m%d
#显示下一年的日期
date -d "+1 year" +%Y%m%d
设定时间:
#设置成20201020,这样会把具体时间设置成空 00:00:00
date -s 20201020
#设置具体时间,不会对日期做更改
date -s 15:10:20
#设置全部时间
date -s "2020-10-20 15:10:20"
A、命令中调用date命令
[root@test65-1 ~]# echo date #只显示date值
date
[root@test65-1 ~]# echo $date #date变量未赋值
[root@test65-1 ~]# echo `date` #调用date命令成功
Mon Oct 12 09:59:18 CST 2020
[root@test65-1 ~]# echo $(date) #调用date命令成功
Mon Oct 12 09:59:39 CST 2020
[root@test65-1 ~]# date
Mon Oct 12 10:02:10 CST 2020
(6)命令的嵌套使用,使用$( $( ))
[root@test65-1 ~]# find /home/ -name *.log
[root@test65-1 ~]# testtar=$(tar -zcvf home.tar.gz $(find /root/ -name *.txt))
[root@test65-1 ~]# echo $testtar
(7)shell 中单引号和双引号区别
‘’ 在单引号中所有的字符包括特殊字符(KaTeX parse error: Undefined control sequence: \) at position 7: ,'',`和\̲)̲都将解释成字符本身而成为普通字…, ‘’, `和\以外所有的字符都解释成字符本身,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用。
Eg:\转义符作用
[root@test65-1 home]# test=1
[root@test65-1 home]# echo $test
1
[root@test65-1 home]# echo \#test
#test
[root@test65-1 home]# echo \$test
$test
[root@test65-1 home]#
A、双引号与单引号区别
[root@test65-1 home]# test=1
[root@test65-1 home]# test1=2
[root@test65-1 home]# echo '$test+$test1'
$test+$test1
[root@test65-1 home]# echo "$test+$test1"
1+2
[root@test65-1 home]#
注:单引号之间的内容原封不动赋值给变量,双引号之间的内容如有特殊符号会保留它的特殊含义。
删除变量:
[root@test65-1 home]# unset test
[root@test65-1 home]# echo $test
[root@test65-1 home]#
(8)环境变量
在 bash shell 中,变量分为两类:全局变量和局部变量
全局变量:对于shell会话和所有的子shell都是可见的
局部变量:它只在自己的进程当中使用
A、局部变量
[root@test65-1 home]# test=1
[root@test65-1 home]# vi 1.sh
#!/bin/bash
echo $test
[root@test65-1 home]# sh 1.sh
[root@test65-1 home]# echo $test
1
#执行1.sh 时,会使用另一个bash去执行,就访问不到$test的值
B、env 命令查看所全局变量
[root@test65-1 ~]# env
[root@test65-1 ~]# env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
C、使用 export 把这个局部变量输出为全局变量
[root@test65-1 ~]# export test=1
[root@test65-1 ~]# echo $test
1
[root@test65-1 ~]# sh 1.sh
1
[root@test65-1 ~]#
D、让变量永久生效,可以把定义好的变量写入配置文件
当登录系统或新开启一个 ssh 连接启动 bash 进程时,一定会加载这 4 个配置文件:
#系统全局环境和登录系统的一些配置
[root@test65-1 ~]# vim /etc/profile
#shell 全局自义配置文件,用于自定义 shell
[root@test65-1 ~]# vim /etc/bashrc
#用于单独自定义某个用户的 bash
[root@test65-1 ~]# vim /root/.bashrc
#用户单独自定义某个用户的系统环境
[root@test65-1 ~]# vim /root/.bash_profile
个人公众号,微信搜索:linux言叙*