2018最新linux云计算集群架构师-第一阶段-Linux操作系统入门到精通-第19章-shell脚本基础-SHELL变量及运用

SHELL变量及运用

1.shell变量

变量是shell 传递数据的一种方法。变量是用来代表每个值的符号名。我们可以把变量当成一个容器,通过变量,可以在内存中存储数据。也可以在脚本执行中进行修改和访问存储的数据

变量的设置规则

1)变量名称通常是大写字母,它可以由数字、字母(大小写)和下划线_组成。变量名区分大小写;但是大家要注意变量名称不能以数字开头

2)等号 = 用于为变量分配值,在使用过程中等号两边不能有空格

3)变量存储的数据类型是整数值和字符串值

4)在对变量赋于字符串值时,建议大家用引号将其括起来。因为如果字符串中存在空格隔符号。需要使用单引号或双引号

5)要对变量进行调用,可以在变量名称前加美元符号$

6)如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含“$变量名”或用${变量名}包含

变量的分类

按照变量的作用可以分成4类

1)用户自定义变量

2)环境变量:这种变量中主要保存的是和系统操作环境相关的数据。

3)位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。

4)预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

按照变量作用域可以分成2类:全局变量和局部变量。

局部变量是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。

全局变量是环境变量,其值不随shell 脚本的执行结束而消失。

2.用户定义变量

变量名命名规则:由字母或下划线打头,不允许数字开头,后面由字母、数字或下划线组成,并且大小写字母意义不同。在使用变量时,在变量名前加$

#给变量VAR1赋值
VAR1=123
echo $VAR1

#错误的赋值方式,不允许数字开头,等号两边不能有空格
#下面代码都报错
VAR2 =456
VAR2= 456
VAR2 = 456
3VAR2 = 456

#变量值的叠加,使用${}
VAR4=mysql
echo $VAR4
echo $VAR4-db.log
echo $VAR4.db.log
#发现输出结果不是我们想要的,怎么办?结果:.log
echo $VAR4db.log
#可以这样
echo ${VAR4}db.log

3.命令的替换,使用$()或反引号

#在命令就调用date命令
#扩展:date命令是显示或设置系统时间与日期
#-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号;
#<+时间日期格式>:指定显示时,使用特定的日期时间格式。

#格式化输出
date +"%Y-%m-%d"  #今天时间,一般备份数据需要用这个
date +"%Y-%m"   #只显示年月
date +"%Y-%m-%d %H:%M.%S"   #日期加时间
date +"%Y/%m/%d %H/%M/%S"  #使用/做分隔符
date +"%Y-%m-%d-%H-%M-%S"  #使用-做分隔符,一般备份数据需要用这个

#注:%y 年份只显示2位, %Y年份显示4位
#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     #显示下一年的日期

#设定时间
date -s 20180523                      #设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01                       #设置具体时间,不会对日期做更改
date -s "2018-05-23 01:01:01"  #这样可以设置全部时间

#在命令中调用date命令输出值
echo `date`
echo $(date)
echo `date +"%Y-%m-%d"`

4)命令的嵌套使用,使用$( $( ))

find /root/ -name *.txt
VAR6=$(tar zcvf root.tar.gz $(find /root/ -name *.txt))
#tar: 从成员名中删除开头的"/"
echo $VAR6   #查看值, VAR6中存储着tar的标准输出

######实战########
#分享一个系统时间错误,引起tar报警告
date -s "2012-03-03 21:25:00"
tar zxvf root.tar.gz -C /opt/

#root/.cache/tracker/db-version.txt
#tar: root/.cache/tracker/db-version.txt:时间戳 2017-09-19 13:05:18 是未来的 168094624.438537189 秒之后
#注:如果弹出这个消息,是因为咱们的当前系统的时间不对。 比如:当前系统的时间晚于文件的mtime时间

ls /opt/root/.mozilla/firefox/wggimqlt.default/ -a  #解压成功

 

posted on 2019-11-05 18:07  herisson_pan  阅读(18)  评论(0)    收藏  举报

导航