【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 ~]# 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) 变量规则测试
[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脚本基础-变量相关推荐
- Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)2
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- 详细介绍Linux shell脚本基础学习(一)
2019独角兽企业重金招聘Python工程师标准>>> Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础 ...
- linux脚本变量运算符,linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)...
Shell 脚本基础 1.变量 什么是变量 #a=1 # echo $a 1 变量:可以变化的量 1.2变量名称注意事项 变量名不能以数字开头 不能与系统中已有的环境变量重名,尽量不要全部使用大写,尽 ...
- linux shell脚本 定义变量,Shell脚本应用 - 编制shell脚本、shell变量
随着Linux系统在企业中的应用越来越多,服务器的自动化管理也变得越来越重要.在Linux服务器的自动化维护工作中,除了计划任务的设置以外,Shell脚本的应用也是非常重要的一部分.作为Linux系统 ...
- Linux Shell 脚本基础
1 export 命令 export 不接参数,则把当前系统的环境变量给显示出来 export 接参数,则把此变量作为环境变量,使得父进程的变量,子进程可以沿用,而无需重复设置. 2 read变量键盘 ...
- linux shell 脚本中变量截取
Linux字符串截取命令 转载 https://www.cnblogs.com/dalianpai/p/12702237.html 今天再写shell的时候,感觉字符串截取不是特别顺利,最后用切割字符 ...
最新文章
- jenkins添加git源码目录时报Error performing command错误
- ASP.NET WebApi OWIN 实现 OAuth 2.0
- C++ int (*s[10])(int) 表示什么?
- 报表工具流行度以及对linux的支持情况调研
- 《Linux杂记:一》
- java tomcat jms_JavaWeb之使用Tomcat、JNDI与ActiveMQ实现JMS消息通信服务
- opencv android 羽化,学习OpenCV:滤镜系列(15)——羽化(模糊边缘)
- tuple list 结构结合record的应用实例
- java8 转 java7,spnego.jar从Java 7切换到Java 8强制转换异常
- java并发测试工具_Java并发测试工具类
- 用javascript实现调用本地用户程序
- Java解压ZIP、RAR文件
- Java毕设项目城市公交系统计算机(附源码+系统+数据库+LW)
- 使用 Docker 搭建 FTP 服务并设置用户的指定目录上传,下载,删除
- 抖竹官网下载代理加盟有哪些盈利点?摆烂后短视频引流拓客软件
- 计算机上的波特率标准,电子信号术语-波特率9600计算单位是波特/每秒(B/s)
- 数控车椭圆编程实例带图_简析数控车床上椭圆加工的编程方法
- 使用tensorflow和Keras的初级教程
- 亚信科技:新业务成高速增长源动力,吹响全栈式数智化转型号角
- 启盈社:我体验开源世界的这几年
热门文章
- win10中使用sqlserver2008r2 SQL Server 配置管理器
- Docker入门(超级详细)———狂神说
- 基于MATLAB的数字图像处理系统
- 3ds Max:标准几何体
- 如何在Debian下手工安装中文字体
- 电子计算机的英文介绍,电子计算机英文术语完全介绍
- unturned服务器无限载入,unturned进不去服务器
- linux内核对孤儿进程寻父,读薄「Linux 内核设计与实现」(2) - 进程管理和调度
- html div保存png图片,纯JS实现将DIV中的内容转化为PNG图片
- 微信支付php详解 php,ThinkPHP框架整合微信支付之刷卡模式图文详解