文章目录

  • 什么是变量?
  • 变量分类:
    • 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 ~]# echo $OSTYPE
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 ~]# echo $NAME
lisi
2) 关于${} 的使用,拼接测试
[root@ecs-c13b ~]# ctest=mysql
[root@ecs-c13b ~]# echo $ctest
mysql
[root@ecs-c13b ~]# echo $ctest-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

特殊变量

特殊变量 含义
$$ Shell本身的PID(ProcessID)
$! Shell最后运行的后台Process的PID
$? 最后运行的命令的结束代码(返回值)
$- 使用Set命令设定的Flag一览
$* 所有参数列表。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@ 所有参数列表。如"$@“用「”」括起来的情况、以"$1" “2"…"2" … "2"…"n” 的形式输出所有参数。
$# 添加到Shell的参数个数
$0 Shell本身的文件名
$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变量。 理解了变量对于我们后面的学习很有帮助。

【Linux】shell脚本基础-变量相关推荐

  1. Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  2. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  3. Linux shell脚本基础学习详细介绍(完整版)2

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  4. Linux shell脚本基础学习详细介绍(完整版)

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...

  5. 详细介绍Linux shell脚本基础学习(一)

    2019独角兽企业重金招聘Python工程师标准>>> Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础 ...

  6. linux脚本变量运算符,linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)...

    Shell 脚本基础 1.变量 什么是变量 #a=1 # echo $a 1 变量:可以变化的量 1.2变量名称注意事项 变量名不能以数字开头 不能与系统中已有的环境变量重名,尽量不要全部使用大写,尽 ...

  7. linux shell脚本 定义变量,Shell脚本应用 - 编制shell脚本、shell变量

    随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要.在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分.作为Linux系统 ...

  8. Linux Shell 脚本基础

    1 export 命令 export 不接参数,则把当前系统的环境变量给显示出来 export 接参数,则把此变量作为环境变量,使得父进程的变量,子进程可以沿用,而无需重复设置. 2 read变量键盘 ...

  9. linux shell 脚本中变量截取

    Linux字符串截取命令 转载 https://www.cnblogs.com/dalianpai/p/12702237.html 今天再写shell的时候,感觉字符串截取不是特别顺利,最后用切割字符 ...

最新文章

  1. jenkins添加git源码目录时报Error performing command错误
  2. ASP.NET WebApi OWIN 实现 OAuth 2.0
  3. C++ int (*s[10])(int) 表示什么?
  4. 报表工具流行度以及对linux的支持情况调研
  5. 《Linux杂记:一》
  6. java tomcat jms_JavaWeb之使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务
  7. opencv android 羽化,学习OpenCV:滤镜系列(15)——羽化(模糊边缘)
  8. tuple list 结构结合record的应用实例
  9. java8 转 java7,spnego.jar从Java 7切换到Java 8强制转换异常
  10. java并发测试工具_Java并发测试工具类
  11. 用javascript实现调用本地用户程序
  12. Java解压ZIP、RAR文件
  13. Java毕设项目城市公交系统计算机(附源码+系统+数据库+LW)
  14. 使用 Docker 搭建 FTP 服务并设置用户的指定目录上传,下载,删除
  15. 抖竹官网下载代理加盟有哪些盈利点?摆烂后短视频引流拓客软件
  16. 计算机上的波特率标准,电子信号术语-波特率9600计算单位是波特/每秒(B/s)
  17. 数控车椭圆编程实例带图_简析数控车床上椭圆加工的编程方法
  18. 使用tensorflow和Keras的初级教程
  19. 亚信科技:新业务成高速增长源动力,吹响全栈式数智化转型号角
  20. 启盈社:我体验开源世界的这几年

热门文章

  1. win10中使用sqlserver2008r2 SQL Server 配置管理器
  2. Docker入门(超级详细)———狂神说
  3. 基于MATLAB的数字图像处理系统
  4. 3ds Max:标准几何体
  5. 如何在Debian下手工安装中文字体
  6. 电子计算机的英文介绍,电子计算机英文术语完全介绍
  7. unturned服务器无限载入,unturned进不去服务器
  8. linux内核对孤儿进程寻父,读薄「Linux 内核设计与实现」(2) - 进程管理和调度
  9. html div保存png图片,纯JS实现将DIV中的内容转化为PNG图片
  10. 微信支付php详解 php,ThinkPHP框架整合微信支付之刷卡模式图文详解