Shell的变量-环境和局部变量以及命令作为变量

一、Shell变量基础

1、变量类型

变量可以分为两类:环境变量(全局变量)和局部变量
环境变量也被称为全局变量,可以在创建它们的shell及其派生出来的子进程shell中使用,局部变量只能在创建它们的shell函数或脚本中使用。还有一些变量是用户创建的,其他的则是专用shell变量。

2、环境变量

环境变量用于定义shell的运行环境,保证shell命令的正确执行,shell通过环境变量来确定登录用户名、命令路径、终端类型、登录目录等。所有的环境变量都是系统全局变量、可用于所有子进程中,这包括编辑器、shell脚本和各类应用。
环境变量可以在命令行中设定,但用户退出的时候这些 变量也会消失。因此最好在用户的家目录下的.bash_profile 文件中或者全局配置/etc/profile文件或者/etc/profile.d/中定义。将环境变量放入profile文件中,每次 用户登录时这些变量的值都会被初始化。
传统上,所有的环境变量都用 大写表示。环境变量应用于用户进程前,必须用export命令导出。

3、自定义环境变量

如果想设置环境变量,就要给环境变量赋值之后或设置变量时使用export命令。带-x选项的declare内置命令也可以完成相同的功能。
在这里插入图片描述
在这里插入图片描述

gw_devops@DESKTOP-8BHS6SV:~$ sudo vim  /etc/profile
    OS=ubuntu
    export OS
gw_devops@DESKTOP-8BHS6SV:~$ . /etc/profile
gw_devops@DESKTOP-8BHS6SV:~$ echo  $OS
ubuntu

在这里插入图片描述

4、显示与取消环境变量

通过echo命令打印环境变量
在这里插入图片描述
用env(printenv)或set显示默认的环境变量

$:printenv

在这里插入图片描述
用set显示所有的本地变量
用unset消除本地变量和环境变量

gw_devops@DESKTOP-8BHS6SV:~$ echo  $USER
gw_devops
gw_devops@DESKTOP-8BHS6SV:~$ unset   USER
gw_devops@DESKTOP-8BHS6SV:~$ echo  $USER
此处为空

5、局部变量

定义本地变量
本地变量只在用户当前的shell生存期的脚本中使用。如果在shell中启动另一个进程或退出,本地变量无效。
普通字符串变量定义
shell变量名的要求:由字母数字下划线定义,不能以数字开头。
linux.linux123,linux_123

OS=ubuntu
OS='ubuntu'
OS="ubuntu"

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
习惯:数字不加引号,其他默认加双引号。

定义变量单引号、双引号与不加引号
在这里插入图片描述

gw_devops@DESKTOP-8BHS6SV:~$ echo '`date`'        #单引号看见什么就是什么
`date`  
gw_devops@DESKTOP-8BHS6SV:~$ echo "`date`"     #双引号如果里面是变量,会把变量解析成相应的内容再显示
Tue Jan 29 11:40:18 DST 2019
gw_devops@DESKTOP-8BHS6SV:~$ echo `date`      #对于连续的字符串不加引号也可以,加一对双引号比较保险,推荐
Tue Jan 29 11:40:31 DST 2019

脚本中局部变量的定义
存在于脚本函数中的变量称为局部变量,要以local方式进行声明,使它只在本函数作用域内生效,防止函数中的命名与变量外部程序中变量重名造成程序异常。
在这里插入图片描述

二、命令作为变量

gw_devops@DESKTOP-8BHS6SV:~$ CMD=`ls`
gw_devops@DESKTOP-8BHS6SV:~$ echo $CMD
ip.txt test test.sh
gw_devops@DESKTOP-8BHS6SV:~$ CMD=$(date +%F)
gw_devops@DESKTOP-8BHS6SV:~$ echo $CMD
2019-01-29

在这里插入图片描述
生产环境常见应用:对站点按时间打包生成不同的文件名

$ sudo  tar  zcf   etc_$(date +%F).tar.gz   /etc
$ ls
etc_2019-01-29.tar.gz 

猜你喜欢

转载自blog.csdn.net/weixin_41476978/article/details/86686322