文章目录

  • Shell脚本变量揭秘
    • 一、自定义变量
      • 1、定义新的变量
      • 2、查看和引用变量的值
      • 3、变量赋值的特殊操作
        • 1)双引号(“”)
        • 2)单引号(‘)
        • 3)反撇号(`)
        • 4)read命令
      • 4、设置变量的作用范围
      • 5、数值变量的运算
    • 二、特殊变量
      • 1、环境变量
      • 2、位置变量
      • 3、预定义变量
    • 三、总结

Shell脚本变量揭秘

shell变量是用作存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。常见的shell变量的类型包括自定义变量、环境变量、位置变量和预定义变量。

一、自定义变量

自定义变量是由系统用户自己定义的变量,只有在用户自己的shell环境中有效,因此又称为本地变量。

1、定义新的变量

bash中的变量操作相对比较简单,在定义一个新的变量时,直接指定变量名称并赋予初始值即可。定义变量的基本格式为“变量名=变量值”,符号两边没有空格。变量名称需要以字母或者下划线开头,名称中不要包含特殊字符(如+、-、*、/、?、%、&、#等)。例如,定义变量name(值为xiaomi)和变量version(值为14),可执行下面操作

2、查看和引用变量的值

通过在变量名称前面添加前导符号"$",可以引用一个变量的值。使用echo命令可以查看变量,可以在一条echo命令中同时查看多条变量的值。

当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号“{}”将其括起来,否则无法确定变量的名称。队医未定义的变量,将显示为空值。

3、变量赋值的特殊操作

在等号“=”后面直接指定变量内容是为变量赋值的最基本方法,除此之外,还有一些特使的赋值操作,可以更加灵活的为变量赋值。

1)双引号(“”)

双引号主要起到界定字符串的作用,当赋值的内容中包括空格时,必须用双引号括起来,其他情况通常可以省略,例如将“xiaomi 13”赋值给变量“new_version”,需要执行“new_version=”xiaomi 13“操作。

在双引号范围内,使用”$“符号可以引用其他变量的值(变量引用),从而可以直接调用现有变量的值赋给新变量,例如执行下面操作,将调用变量version来赋给新变量"huawei”,最终值为“huawei 13”

2)单引号(‘)

当要赋值的内容包含“$“、””“、”\“等具有特殊含义的字符时,应该使用单引号括起来,在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。但如果赋值的内容也包括单引号,需要用” \’ “符号来转义,以免冲突。例如:

3)反撇号(`)

反撇号主要用户命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括起来的范围内必须是能够执行的命令行,否则将会出错。例如在一行命令中查找tar命令程序以及useradd命令程序的位置并列出其详细属性,可以执行以下操作:

但是反撇号难以实现在一行命令中实现嵌套操作,这是可以改用“$()”来代替反撇号操作。

4)read命令

read是bash的内置命令,也可以实现对变量赋值。read命令用来提示用户信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入一行内容,并以空格为分割符,将读入的各字段挨个赋值给指定的变量(多余的内容赋值给最后一个变量)。如果只有一个变量,则将整行内容赋值给此变量。

read命令可以结合选项“-p”和“-t”来设置提示信息与输入等待时间(默认单位为秒),来告知用户应该输入什么相关事项和规定时间内为输入将自动跳出,使交互操作界面更加友好易用。例如

4、设置变量的作用范围

默认情况下,新定义的变量只在当前的shell环境中生效,因此称为局部变量。当进入子程序或者新的子shell环境,局部变量无法再使用。例如直接执行bash进入一个新的子shell脚本后,将无法引用父级shell环境定义的变量version,name等变量。

为了使用户定义的变量在所有子shell环境中能继续使用,可以通过内部命令Export将指定的变量导出为全局变量,可以使用多个变量名称作为参数(不需使用$符号),变量名之间以空格分割,例如:

使用export导出全局变量同时可以为该变量赋值,例如定义一个新变量mood,赋值为happy如下:

5、数值变量的运算

在bash shell环境中,数值变量只能进行简单的整数运算,不支持小数运算。整数值的运算主要通过内部命令expr进行,基本格式为:

​ expr 变量1 运算符 变量2 [运算符 变量3] …

常用的几种运算符如下:

其中乘法运算” * “,需要使用转义符” \ ”,否则会被当成文件通配符。例如:

如果需要将运算结果赋值给其他变量,则结合上面提到的反撇号赋值即可。另外,使用expr进行计算时,变量必须是整数,不能是字符串,也不能包含小数,否则会报错。

除expr命令外,变量数值常见的命令还包括:(())、let等。例如:

二、特殊变量

除用户自定义的shell变量外,Linux系统和bash shell环境中还有一系列的特殊变量–环境变量、位置变量、预定义变量。

1、环境变量

环境变量指的是出于运行需要而由Linux系统提前创建的一类变量,主要用户设置用户的工作环境,包括用户宿主目录、目录查找路径、用户当前目录、登录终端等。

使用env(environment)目录可以查看到当前工作环境下的环境变量,如:

PATH变量用于设置可执行程序的默认搜索路径,当仅指定文件名称来执行命令程序时,Linux系统将在PATH变量指定的目录范围内查找对应的可执行文件。如果找不到会提示“command not found”。

2、位置变量

当执行命令操作时,第一个字段表示命令名或者脚本程序名,其余的字符串参数按照从左到右的顺序依此赋值给位置变量。位置变量也称为位置参数,使用$1、$2、$3、…、$9表示。例如执行”ls -lh /opt“时,其中第一个位置变量为“-lh”,以$1表示;第二个位置变量为“/opt",以$2表示。命令或者脚本本身的名称使用”$0“表示(但是$0属于预定义变量而不是位置变量)。

下面编写一个简单的加法脚本,计算两个整数的和,从而更好的说明位置变量的作用,需要计算的两个变量整数在执行脚本时以位置变量的形式提供:

3、预定义变量

预定义变量是由bash程序预先定义好的一类特殊变量,用户只能使用预定义变量。而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用"$"符号和另一个符号组合表示,较常用的几个预定义变量的含义如下:

  • $#:表示命令行中的位置参数的个数。
  • $* :表示所有位置参数的内容。
  • $?:表示前一条命令执行后的返回状态,返回值为0则表示执行正确,返回任意非零值均表示执行出现异常。
  • $0:表示当前执行的脚本或程序的名称。

三、总结

  • 定义或者赋值变量时,采用“变量名=变量值”的格式。赋值操作还可使用单引号、双引号、反撇号、read命令等方式。
  • 查看或者引用变量的值时,采用“$变量名”的格式。
  • 常见的特殊变量包括环境变量、位置变量、预定义变量。

Shell脚本变量揭秘相关推荐

  1. shell脚本 变量

    shell脚本 变量类型 什么是Shell变量 用一个固定的字符串去表示不固定的内容. Shell变量的类型 shell脚本中自定义变量的类型,我们这里分为: 自定义变量 环境变量 位置变量 与定义变 ...

  2. 【跟晓月学shell脚本】掌握shell脚本变量实战案例

    前言 上篇文章我们探讨了shell脚本变量的基本原理和概念,本篇我们基于上面的内容增加一些实战. 如果你还没有学习shell脚本的变量理论,可以点击链接:[跟晓月学shell脚本]掌握shell脚本变 ...

  3. linux shell 数据类型,Linux Shell脚本 - 变量和数据类型

    摘要:本文主要学习了Shell脚本中的变量和数据类型. 变量 定义变量的语法 定义变量时,变量名和变量值之间使用"="分隔,并且等号两边不能有空格: 变量名=变量值 变量名规则 变 ...

  4. 【跟晓月学shell脚本】掌握shell脚本变量原理及概念

    前言 跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难. 想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇 文章目录 前言 ...

  5. shell脚本——变量定义

    变量的定义 变量如何定义 变量的定义规则 变量名区分大小写 变量名不能有特殊符号 变量名不能以数字开头 等号两边不能有任何空格 变量的定义方式 基本方式 命令执行结果赋值给变量 交互式定义变量(rea ...

  6. linux脚本变量,shell脚本变量的使用

    问var=value 在export前后的差在哪? 这次让我们暂时丢开command line, 先了解一下bash变量(variable)吧- 所谓的变量,就是利用一个固定的"名称&quo ...

  7. shell 脚本 变量 获取程序输出结果异常分析

    1 2 3 #! /bin/bash pid=$(pgrep hello) echo ${pid} 脚本名称是 hello_test.sh 当hello进程存在时,总是返回两个值 当hello进程不存 ...

  8. Shell脚本——变量

    变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则 在 Bash shell 中,每一个变量的值都 ...

  9. 05 linux shell脚本 变量的取用echo;变量的设置和修改;变量的使用规范以及示例

    linux shell 变量 设置 修改 规则 变量的取用: echo 变量的设置和修改 linux 变量 规则 变量 就是以一组文字或符号等,来取代一些配置或者是一串保留的数据! 变量的取用: ec ...

最新文章

  1. 【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接
  2. Opencv3.4.1中csSaveImage
  3. CentOS 7 防止端口自动关闭
  4. MonoRail学习笔记十一:页面控件的填充和验证
  5. 小爱音响调用php接口_PHP调用语音合成接口
  6. java 展现层框架_spring快速入门例子教程:06展现层
  7. python练手经典100例-Python 的练手项目有哪些值得推荐?
  8. [导入]使用ASP.NET AJAX的注意事项
  9. WPF:Webbrowser 捕获关闭事件
  10. VS编译错误与链接错误汇总
  11. Linux下的uniq,head,tail,cut,paste
  12. EasyExecl导出模板,实现动态下拉列
  13. Objective-C ------ 多态
  14. win10系统找不到telnet服务器,win10找不到telnet服务怎么办_win10没有telnet服务如何找回...
  15. 词根词缀 (一):前缀篇
  16. 基于swiper使用vue-awesome-swiper 实现鼠标移入暂停自动播放、左右按钮控制前进后退、常见避坑、API中文文档地址
  17. 3加3减!让商家好好做生意,阿里绝对是认真的!
  18. Win11安装 eNSP模拟器
  19. Windows下配置Git连接上github, 并将本地文件夹同步(加入了个人注释)
  20. C++ 宽、窄字符转换

热门文章

  1. 本人的QQ群:有来的可以加。
  2. oracle sql plus 导入dmp文件,sqlplus导入dmp数据库文件
  3. Rabbitmq集成与使用
  4. 微软Skype同声传译对话不是梦
  5. android实现推送功能实现,android教你怎么轻松实现手机推送功能,一步一步教你Mob+MobPush...
  6. foreach与for
  7. 油藏弹性存储量计算公式_油藏采收率测算方法_采收率
  8. 计算机时代汉字书写有了新的方式,汉字书写将在手写电脑中复兴
  9. 服务器axios响应慢,axios请求问题总结
  10. CASENet中cityscape edge GT是如何产生的