当前位置: 首页 > news >正文

shell 编程之变量总结

一、什么是Shell 变量

变量用于存储和管理临时的数据, 这些数据都是在运行内存中的;

二、变量的分类

shell中变量大致可以分为下面几类:

  • 系统环境变量
  • 自定义变量
  • 特殊符号变量

系统环境变量

是由系统提供的共享变量。是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用;

使用 "env" 命令可以查看shell所在的系统环境变量

 

查看shell变量(系统环境变量+自定义变量+函数)

 

常用系统环境变量

变量名称含义
==PATH==与windows环境变量PATH功能一样,设置命令的搜索路径,以冒号为分割
HOME当前用户主目录:/root
SHELL当前shell解析器类型:/bin/bash
==HISTFILE==显示当前用户执行命令的历史列表文件:/root/.bash_history
PWD显示当前所在路径:/root
OLDPWD显示之前的路径
HOSTNAME显示当前主机名:itheima
HOSTTYPE显示主机的架构,是i386、i686、还是x86、x64等:x86_64
==LANG==设置当前系统语言环境:zh_CN.UTF-8

下面随机测试一下输出几个系统环境变量

 

 

自定义变量

顾名思义,自定义变量就是用户为了满足使用的方便自定义的一些变量

按照使用范围,自定义变量可按如下分类:

  • 自定义局部变量
  • 自定义常量
  • 自定义全局变量

自定义局部变量

就是定义在一个脚本文件中的变量, 只能在这个脚本文件中使用的变量, 就是局部变量

使用语法规则

var_name=value

定义变量,需要遵循一定的规则:

  1. 变量名称可以有字母,数字和下划线组成, 但是不能以数字开头

  2. 等号两侧不能有空格

  3. 在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算

  4. 变量的值如果有空格, 必须使用双引号括起来

  5. 不能使用Shell的关键字作为变量名称

看下面的案例

 

变量使用

${var_name} 进行查询(使用变量);

变量删除

unset var_name

 

自定义常量

就是变量设置值以后不可修改的变量叫常量, 也叫只读变量,使用语法为: readonly var_name

 

自定义全局变量

即在当前脚本文件中定义全局变量, 这个全局变量可以在当前Shell环境与子Shell环境中都可以使用

自定义全局变量语法

export var_name1 var_name2

 

特殊变量

特殊变量在shell编程的某些特殊业务场景下可以发挥意想不到的效果,下面列举几个常用的特殊变量;

特殊变量 :$n

  • 用于接收脚本文件执行时传入的参数
  • $0 用于获取当前脚本文件名称的
  • $1~$9, 代表获取第一输入参数到第9个输入参数
  • 第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取

执行脚本文件传入参数语法

sh 脚本文件 输入参数1 输入参数2 ...

通过下面的方式输出参数

 

执行脚本

 

特殊变量 :$#

获取所有输入参数的个数

基于上面的shell内容简单改造,打印输出参数个数

 

执行shell,观察结果

 

特殊变量:$*$@

都是获取所有输入参数, 用于以后输出所有参数

两者的区别

  • 不使用双引号括起来, 功能一样,$*和$@获取所有输入参数,格式为: $1 $2 ... $n
  • 使用双引号括起来,"$*"获取的所有参数拼接为一个字符串, 格式为: "$1 $2 ... $n", "$@"获取一组参数列表对象, 格式为: "$1" "$2" ... "$n"(使用循环打印所有输入参数可以看出区别)

来看下面的shell脚本

 

执行这个shell脚本,观察输出效果

 

特殊变量:$?

用于获取上一个Shell命令的退出状态码, 或者是函数的返回值

每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功,一般来说, 返回0代表命令执行成功, 非0代表执行失败;

控制台输入一个正确的命令,然后再使用这个命令就可以看出效果

 

特殊变量:$$

用于获取当前Shell环境的进程ID号

 

自定义系统环境变量

当前用户进入Shell环境初始化的时候,会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序使用;

假如要是所有Shell程序或命令使用的变量, 就可以定义在这个文件中;

创建环境变量步骤

1、编辑/etc/profile全局配置文件

增加命令: 定义变量VAR1=VAR1 并导出为环境变量
扩展: vim里面的命令模式使用G快速定位到文件末尾位置, 使用gg定位到文件首行位置

 

2、重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重载

source /etc/profile

 

3、在Shell环境中读取系统级环境变量VAR1

 

相关文章:

  • [Mybatis-Plus笔记] MybatisPlus-03-QueryWrapper条件构造器
  • STM32F1定时器-PWM输出
  • CNN天气识别
  • 基于SpringBoot+Vue的校园招聘管理系统(Java毕业设计)
  • java File类基本概念基本构造方法使用
  • 基于Java微服务方案的商品秒杀系统
  • 谷粒商城 高级篇(一) --------- ElasticSearch 的简介与安装
  • mybatis的sql标签
  • 面试题-参加生日宴会的最多人数
  • 开发运维-常用远程桌面开源软件
  • 【JAVA】SrpingMVC(上)—— 注解请求与响应
  • ZZCMS201910代码审计
  • HTTPDNS
  • ApacheDBUtils的使用
  • 补涨行情的模式如何做?(几天几板模式)
  • [deviceone开发]-do_Webview的基本示例
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • const let
  • HTML5新特性总结
  • java正则表式的使用
  • MySQL数据库运维之数据恢复
  • Redis字符串类型内部编码剖析
  • 反思总结然后整装待发
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前端之Sass/Scss实战笔记
  • 如何进阶一名有竞争力的程序员?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 手机端车牌号码键盘的vue组件
  • 移动端 h5开发相关内容总结(三)
  • scrapy中间件源码分析及常用中间件大全
  • 湖北分布式智能数据采集方法有哪些?
  • ​你们这样子,耽误我的工作进度怎么办?
  • # 飞书APP集成平台-数字化落地
  • #1014 : Trie树
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • #控制台大学课堂点名问题_课堂随机点名
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (39)STM32——FLASH闪存
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Note)C++中的继承方式
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (三)docker:Dockerfile构建容器运行jar包
  • (十一)手动添加用户和文件的特殊权限
  • (一)认识微服务
  • (转)setTimeout 和 setInterval 的区别
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ... 是什么 ?... 有什么用处?
  • .Net 6.0 处理跨域的方式
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net中生成excel后调整宽度
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @EnableConfigurationProperties注解使用
  • [.net]官方水晶报表的使用以演示下载
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)