首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
软件
运维软件
办公软件
书籍资源
技术陪跑营
重要信息
首页 运维教程shell脚本【Linux】shell脚本基础-变量

【Linux】shell脚本基础-变量

文章目录

什么是变量?
变量分类:
1. 按照变量的作用分
2. 按照变量的作用域分:
环境变量
用户定义变量
变量的命名与规则:
1) 变量规则测试
2) 关于${} 的使用,拼接测试
3)能不能不加{}?
4) 使用反引号或者$()
5) 特殊用法
6) 单引号和双引号的区别
特殊变量
特殊变量实例
变量的案例
总结

什么是变量?

变量是任何一门语言中都不可缺少的组成部分,用于存放各种数据。 脚本语言在使用变量前通常不需要声明类型,只需要直接赋值即可。
环境变量: 有一些特殊的变量会被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变量。 理解了变量对于我们后面的学习很有帮助。

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

网友评论comments

发表评论

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

暂无评论

Copyright © 2021 极客运维 公众号《极客运维之家》
扫二维码
扫二维码
返回顶部