shell study-3day--shell变量及实例

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)用户自定义变量 变量名命名规则:由字母或下划线打头,不允许数字开头,后面由字母、数字或下划线组成,并且大小写字母意义不同。在使用变量时,在变量名前加 34ABCEBash2Ashell使Bshell4线,线使
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言叙*

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值