首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
常用软件
运维软件
办公软件
书籍资源
日知录
招聘信息
读书计划
书单
关于我们
首页 运维教程shell脚本【Linux】shell脚本基础-变量

【Linux】shell脚本基础-变量

什么是变量?

变量是任何一门语言中都不可缺少的组成部分,用于存放各种数据。 脚本语言在使用变量前通常不需要声明类型,只需要直接赋值即可。
环境变量: 有一些特殊的变量会被shell脚本或者操作系统环境用来存储一些特别的值,这类变量被称为环境变量,也有人叫系统变量。

变量分类:

1. 按照变量的作用分
  • 1、用户自定义变量
  • 2、环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  • 3.位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  • 4、预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
2. 按照变量的作用域分:
  • 全局变量
    全局变量是环境变量,其值不随shell 脚本的执行结束而消失。
  • 局部变量
    局部变量是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。

环境变量

系统定义的变量 意义
BASH=/bin/bash Bash Shell 名称
BASH_VERSION=4.1.2(1) Bash 版本
HOME=/home/linuxtechi 用户家目录
LOGNAME=LinuxTechi 当前登录用户的名字
OSTYPE=Linux 操作系统类型
PATH=/usr/bin:/sbin:/bin:/usr/sbin 可执行文件搜索路径
PWD=/home/linuxtechi 当前工作目录
SHELL=/bin/bash Shell 名称
USERNAME=linuxtechi 当前登录的用户名
[root@ecs-c13b ~]# echo BASH
/bin/bash
[root@ecs-c13b ~]# echoOSTYPE
linux-gnu
[root@ecs-c13b ~]# 

我们可以查看与进程相关的环境变量:

[root@ecs-c13b ~]# pgrep sshd
2970
29858
[root@ecs-c13b ~]# cat /proc/2970/environ 
LANG=en_US.UTF-8PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binNOTIFY_SOCKET=/run/systemd/notifySSH_USE_STRONG_RNG=0[root@ecs-c13b ~]# 

用户定义变量

变量的命名与规则:
  1. 变量由字母或者下划线打头,不允许数字开头,后面由字母,数字或者下划线组成,并且大小写意义不同。
  2. 在使用变量时候,需要在变量名字前面加$
  3. 等号两边不能有空格
  4. 变量值的叠加,使用${}
  5. 命令替换,使用$()或者反引号
1) 变量规则测试
[root@ecs-c13b ~]# 2eee=4      ## 不能以数字开头
-bash: 2eee=4: command not found
[root@ecs-c13b ~]# name=zhangshan   ### 大小写的区别
[root@ecs-c13b ~]# NAME=lisi
[root@ecs-c13b ~]# echo name
zhangshan
[root@ecs-c13b ~]# echoNAME
lisi

2) 关于${} 的使用,拼接测试
[root@ecs-c13b ~]# ctest=mysql
[root@ecs-c13b ~]# echo ctest
mysql
[root@ecs-c13b ~]# echoctest-txt
mysql-txt
[root@ecs-c13b ~]# echo ctest.db.log-txt
mysql.db.log-txt
[root@ecs-c13b ~]# echo {ctest}db.log
{mysql}db.log
[root@ecs-c13b ~]# echo ${ctest}db.log
mysqldb.log

3)能不能不加{}?
[root@ecs-c13b ~]# echo $ctestdb.log-txt
.log-txt

4) 使用反引号或者$()

[root@ecs-c13b ~]# echo date
date
[root@ecs-c13b ~]# echo $(date)
Wed Aug 5 15:53:03 CST 2020
[root@ecs-c13b ~]# echo date
Wed Aug 5 15:53:15 CST 2020
[root@ecs-c13b ~]#

5) 特殊用法
[root@ecs-c13b ~]# date +"%Y-%m"
2020-08

[root@ecs-c13b ~]# date +"%Y-%m-%d-%H%M%S"
2020-08-05-155600
[root@ecs-c13b ~]# 
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      #显示下一年的日期

6) 单引号和双引号的区别
  • ‘’ 在单引号中所有的字符包括特殊字符($,”,`和\)都将解释成字符本身而成为普通字符。
  • “” 在双引号中,除了$, ”, `和\以外所有的字符都解释成字符本身,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义

注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\将输出“”符号,而不当做是变量引用

[root@ecs-c13b ~]# name=zmgaosh
[root@ecs-c13b ~]# echo name
zmgaosh
[root@ecs-c13b ~]# echo 'name'
name
[root@ecs-c13b ~]# echo "name"
zmgaosh

特殊变量

$1 到$n |添加到Shell的各参数值。1是第1参数、2是第2参数…。

特殊变量实例
[root@ecs-c13b ~]# vim ex1
[root@ecs-c13b ~]# chmod +x ex1 
[root@ecs-c13b ~]# ./ex1 11  12 14
Shell 传递参数实例!
执行的文件名:./ex1
第一个参数为:11
第二个参数为:12
第三个参数为:14
[root@ecs-c13b ~]# 

变量的案例

练习一:
模拟用户登录并显示登录用户

[root@ecs-c13b ~]# vim login.sh
[root@ecs-c13b ~]# bash login.sh 
请输入用户名: zmgaosh     
请输入密码: 123456
Login success,Welcome,zmgaosh
[root@ecs-c13b ~]# 

总结

本节是循序渐进学运维系列的shell篇-shell变量。 理解了变量对于我们后面的学习很有帮助。

互联网老辛:
互联网编程手艺人,架构师,一个技术极客,一个布道者;高中起就有一个做讲师的梦想,工作十余载,终于有幸成为云计算讲师,持续钻研云计算和信息安全领域,并继续把自己所学所感真心传授给自己的学员,帮助更多想要进入IT行业的小伙伴。传道授业解惑,深知责任重大,每日战战兢兢,如履薄冰。苦心钻研,一直前行,不敢有丝毫懈怠。

本文链接:http://www.geekyunwei.com/2034.html

网友评论comments

发表评论

邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2021 极客运维 备案号: 京ICP备2021004281号
扫二维码
扫二维码
返回顶部