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

本文介绍了Shell编程中的变量基础知识,包括环境变量(全局变量)和局部变量的定义、用途、创建与取消。环境变量用于定义shell运行环境,并在所有子进程中可用。自定义环境变量需要赋值后使用`export`或`declare -x`。局部变量仅在当前shell脚本中有效,用`local`声明。同时,文章还探讨了将命令作为变量在生产环境中的实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值