SHELL 变量和引用

一、变量的定义及命名

  • 变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。几乎所有的程序设计语言中都有定义变量,并且其涵义也大同小异。从本质上讲,变量就是在程序中保存用户数据的一块内存空间(即是临时的),而变量名就是这块内存空间的地址。也可以作为一个表达式或一个命令。
  • 在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是,代表内存地址的变量名却保持不变。(即变量是值可能会一直变,但变量名却保持不变
  • 命名:在Shell中,变量名可以由字母、数字或者下划线组成,并且只能以字母或者下划线开头

二、变量的类型

1.根据数据类型分类

Shell是一种动态类型语言和弱类型语言

  • echo $test_var   # 输出变量值
  • echo “$test_var”  # 如果要作为一个整体,尽量用双引号
  • echo ‘$test_var’   # 输出 $test_var
  • echo $(pwd)    # 获取该命令的执行结果
2. 根据作用域分类
  • 环境变量
    • 使用declare -x 或 export 导出才可以叫环境变量

    • 也叫全局变量

    • 所有环境变量的名字都采用大写,且要导出

    • 分为自定义环境变量

      • 一般是指用export内置命令导出的变量,用于定义shell的运行环境,保证shell命令的正确执行。环境变量可以在命令行中设置和创建,但用户退出命令行时这些变量值就会丢失,即该环境变量只在当前 shell和子shell中有效。如果希望永久保存环境变量,可以在配置文件中设置。
      • 如果在命令行定义一个变量 data ,和 export data2导出 ,在脚本里输出它们,再利用bash执行脚本,那么只有data2可以被导出值。
      • 如果想永久保存环境变量
        1) 用户的环境变量配置
        ~/.bash_profile~/.bashrc 里定义
        2) 全局环境变量的配置
        /etc/bashrc/etc/profile 文件或者 /etc/profile.d 目录中定义
      • 定义环境变量的三种方式:
        在这里插入图片描述
        设置过后需要重新用户连接,才会去访问该配置文件,才会生效。或者用 sourc 或 . 执行重新执行脚本,不会产生子进程。
    • bash内置的环境变量
      shell内置的环境变量是所有的shell程序都可以使用的变量。包括有 PATH、HOME、COLUMNS、HISTFILE、HISTSIZE等

  • 普通变量
    • 脚本或命令行定义的变量
    • 普通变量也可称为局部变量,与全局变量相比,局部变量的使用范围较小,通常仅限于某个程序段访问,例如函数内部。在Shell语言中,可以在函数内部通过local关键字定义局部变量,另外,函数的参数也是局部变量。

三、变量的定义

1. 变量名=变量值
  • 定义路径
    变量名=/xxx/xxx.txt
  • 命令结果赋值变量
    变量名=$(ls)  -->或反引号引用
  • 注意:=前后不能有空格
  • 引用变量:$变量名 或者 ${变量名}
  • 查看变量:echo $变量名
  • 取消变量:unset 变量名
  • 作用范围:仅在当前shell中有效
2. 位置参数和预定义变量
  • 位置参数:从命令行传递给Shell脚本的参数又称为位置参数,Shell脚本会根据参数的位置使用不同的位置参数变量读取它们的值。
    在这里插入图片描述
  • 例如:
    在这里插入图片描述
    在这里插入图片描述
  • $@ 和 $* 的区别
    $@ 是以个体/数组/列表的形式返回的;而 $* 是以整体的形式返回的
    在这里插入图片描述
    在这里插入图片描述

四、变量的运算

1. 运算符

在这里插入图片描述

2. 运算操作符与运算命令
  • (()) -->用于整数运算的常用运算符 ,括号中不需要使用 $ 符号
    在这里插入图片描述
  • let -->用于整数运算,变量名毋需使用 $ 符号
    在这里插入图片描述
  • expr -->可用于整数运算
    • 计算:
      在这里插入图片描述
    • 判定数字还是字母
      在这里插入图片描述
  • bc -->一个计算器程序
    在这里插入图片描述
  • $[] -->用于整数运算
    在这里插入图片描述
  • declare -->用于整数运算
    在这里插入图片描述
3. 表达式
  • echo $data = echo ${data}
  • ${#parameter} -->内容长度
    在这里插入图片描述
  • ${parameter:start} -->截取字符串到末尾
    在这里插入图片描述
    ${parameter:start:lenth} -->截取字符串:几个
    在这里插入图片描述
  • ${parameter#word} -->删除最短匹配 -->从左向右
    ${parameter##word} -->删除最长匹配
    在这里插入图片描述
  • ${parameter%word} -->删除最短匹配 -->从右向左
    ${parameter%%word} -->删除最长匹配
    在这里插入图片描述
  • ${parameter/pattern/string} -->string替代第一个pattern
    ${parameter//pattern/string} -->string替代全部pattern
    注意:替换完不影响data值
    在这里插入图片描述

五、练习

练习1

定义两个变量:num1=10和num2=2
使用(()): 计算num1 + num2的值并输出
使用let: 计算num1 * num2的值输出
使用expr: 计算num1 对 num2执行或的位运算
使用$[]: 计算 num2的num1次方值
declare: 计算 num1 除以 num2的值
计算num2除num1的值(使用bc)

  • 编辑一个脚本文件并在命令行输出

在这里插入图片描述在这里插入图片描述

练习2

path=/data/data1/data2.txt
去获取它所在的目录
去获取文件的名字

在这里插入图片描述

练习3

设置一个只针对root的环境变量: ENV_ROOT=ROOT
设置一个针对所有用户的环境变量: ENV_ALL=ALL
在root用户下访问:ENV_ROOT和ENV_ALL
在普通用户下访问:ENV_ROOT和ENV_ALL

  • 在root用户的 ~/.bash_profile 文件内添加变量ENV_ROOT=ROOT
  • /etc/profile 文件内添加变量ENV_ALL=ALL
  • 在root用户下访问,先 su - 重新连接一下
    在这里插入图片描述
  • 在普通用户下访问, su - redhat
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值