文章目录
- 特殊变量实例
- 变量的命名与规则:
- 1) 变量规则测试
- 2) 关于${} 的使用,拼接测试
- 3)**能不能不加{}?**
- 4) 使用反引号或者$()
- 5) 特殊用法
- 6) 单引号和双引号的区别
- 1. 按照变量的作用分
- 2. 按照变量的作用域分:
- 什么是变量?
- 变量分类:
- 环境变量
- 用户定义变量
- 特殊变量
- 变量的案例
- 总结
变量是任何一门语言中都不可缺少的组成部分,用于存放各种数据。 脚本语言在使用变量前通常不需要声明类型,只需要直接赋值即可。
环境变量: 有一些特殊的变量会被shell脚本或者操作系统环境用来存储一些特别的值,这类变量被称为环境变量,也有人叫系统变量。
- 1、用户自定义变量
- 2、环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
- 3.位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
- 4、预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
- 全局变量
全局变量是环境变量,其值不随shell 脚本的执行结束而消失。 - 局部变量
局部变量是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。
[root@ecs-c13b ~]# echo $BASH/bin/bash[root@ecs-c13b ~]# echo $OSTYPElinux-gnu[root@ecs-c13b ~]#
我们可以查看与进程相关的环境变量:
[root@ecs-c13b ~]# pgrep sshd297029858[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 ~]#用户定义变量变量的命名与规则:
- 变量由字母或者下划线打头,不允许数字开头,后面由字母,数字或者下划线组成,并且大小写意义不同。
- 在使用变量时候,需要在变量名字前面加$
- 等号两边不能有空格
- 变量值的叠加,使用${}
- 命令替换,使用$()或者反引号
[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 $namezhangshan[root@ecs-c13b ~]# echo $NAMElisi2) 关于${} 的使用,拼接测试
[root@ecs-c13b ~]# ctest=mysql[root@ecs-c13b ~]# echo $ctestmysql[root@ecs-c13b ~]# echo $ctest-txtmysql-txt[root@ecs-c13b ~]# echo $ctest.db.log-txtmysql.db.log-txt[root@ecs-c13b ~]# echo {$ctest}db.log{mysql}db.log[root@ecs-c13b ~]# echo ${ctest}db.logmysqldb.log3)能不能不加{}?
[root@ecs-c13b ~]# echo $ctestdb.log-txt.log-txt4) 使用反引号或者$()
[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 ~]#
[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 $namezmgaosh[root@ecs-c13b ~]# echo '$name'$name[root@ecs-c13b ~]# echo "$name"zmgaosh特殊变量
[root@ecs-c13b ~]# vim ex1[root@ecs-c13b ~]# chmod +x ex1 [root@ecs-c13b ~]# ./ex1 11 12 14Shell 传递参数实例!执行的文件名:./ex1第一个参数为:11第二个参数为:12第三个参数为:14[root@ecs-c13b ~]#变量的案例
练习一:
模拟用户登录并显示登录用户
[root@ecs-c13b ~]# vim login.sh[root@ecs-c13b ~]# bash login.sh 请输入用户名: zmgaosh 请输入密码: 123456Login success,Welcome,zmgaosh[root@ecs-c13b ~]#总结
本节是循序渐进学运维系列的shell篇-shell变量。 理解了变量对于我们后面的学习很有帮助。