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


    前言

    跟晓月一起学shell,死磕shell脚本,让shell脚本学习不再难。

    想学习更多shell脚本的案例,可以前往我的师父的shell脚本专栏:shell脚本从入门到实战-案例篇

    一. 什么是变量?

    变量是任何一门语言中都不可缺少的组成部分,用于存放各种数据。 脚本语言在使用变量前通常不需要声明类型,只需要直接赋值即可。

    变量是计算机编程中用于存储和表示数据的一种命名容器。它们用于在程序中存储、访问和操作各种类型的数据,包括数字、字符串、布尔值等。

    变量有两个主要组成部分:变量名和变量值。变量名是标识符,用于在程序中引用该变量。变量值是存储在该变量中的实际数据。

    二. 变量分类

    2.1 按照变量的作用分

    按照变量的作用分:

    1、用户自定义变量
    2、环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
    3.位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
    4、预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

    2.2 按照变量的作用域分

    • 全局变量
      全局变量是环境变量,其值不随shell 脚本的执行结束而消失。
    • 局部变量
      局部变量是shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预定义变量。

    全局变量就是系统环境变量:
    局部变量,一般指用户自定义变量和一些临时的变量,比如位置和预定义。

    在Linux系统中,常见的环境变量配置文件有以下几种:

    • ~/.bashrc:这是用户的环境变量,位于用户的主目录下。可以在该文件中设置用户特定的环境变量和自定义的别名。该文件在用户登录时执行一次。

    • ~/.bash_profile:这是用户登录时bash shell执行的主配置文件,位于用户的主目录下。可以在该文件中设置用户特定的环境变量和自定义的别名。该文件在用户登录时执行一次。

    • /etc/profile:这是系统范围的全局配置文件,适用于所有用户。可/etc/profile的文件中编辑的任意变量都是系统环境变量

    • /etc/bashrc:这是系统范围的bash shell配置文件,适用于所有用户。可以在该文件中设置系统范围的环境变量和全局别名。该文件在每次打开新的终端或登录时执行。

    • /etc/environment:这是一个全局的环境变量配置文件,适用于所有用户。该文件简单地定义了键值对形式的环境变量,不支持脚本和复杂的操作。

    三. 变量的定义与查看

    3.1 环境变量

    printenv 可以打印所有的环境变量

    [root@mufeng41 ~]# vim /etc/hosts
    [root@mufeng41 ~]# printenv
    XDG_VTNR=1
    SSH_AGENT_PID=17381
    XDG_SESSION_ID=2
    HOSTNAME=localhost.localdomain
    IMSETTINGS_INTEGRATE_DESKTOP=yes
    VTE_VERSION=5202
    TERM=xterm-256color
    SHELL=/bin/bash
    XDG_MENU_PREFIX=gnome-
    HISTSIZE=1000
    GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/fb6cd2d7_7466_4574_9642_7bb3547161d8
    QTDIR=/usr/lib64/qt-3.3
    QTINC=/usr/lib64/qt-3.3/include
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    备注:使用时要在环境变量前添加$

    系统定义的变量意义
    BASH=/bin/bashBash 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/bashShell 名称
    USERNAME=linuxtechi当前登录的用户名

    示例:

    [root@mufeng41 ~]# echo $BASH
    /usr/bin/bash
    [root@mufeng41 ~]# echo $SHELL
    /bin/bash
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.2 特殊变量

    特殊变量中包含了位置变量

    $0       当前脚本的名称;
    $n       当前脚本的第n个参数,n=1,2,…9;
    $*$@   当前脚本的所有参数(不包括程序本身);
    $#       当前脚本的参数个数(不包括程序本身);
    $?       命令或程序执行完后的状态,返回0表示执行成功;
    $$       程序本身的PID号。
    $!:最后一个在后台运行的进程的进程ID。
    $IFS:字段(单词)分隔符的值,用于定义Shell中的字段分割行为,默认为空格、制表符和换行符。
    $RANDOM:一个随机整数值。
    $PIPESTATUS:最后一个管道命令中各个命令的退出状态码。
    $LINENO:当前执行的代码行号。
    $SECONDS:自脚本启动后的秒数。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.3 用户自定义变量

    用户自定义变量的作用域是 :当前的shell

    1.基本语法
    (1)定义变量:变量=值
    (2)撤销变量:unset 变量,可以重新进行赋值

    声明静态变量:readonly变量,注意:不能unset取消,只能刷新shell

    readonly 是一个Shell命令,用于将变量设置为只读(read-only)。一旦变量被设置为只读,就无法对其进行修改或重新赋值。这可以保护重要的变量免受意外的修改。

    使用 readonly 命令可以确保某个变量的值在脚本执行期间保持不变。这对于脚本的稳定性和安全性非常重要,尤其是当脚本中有关键的配置参数或其他敏感数据时。

    [root@mufeng41 ~]# readonly a=2
    [root@mufeng41 ~]# echo $a
    2
    [root@mufeng41 ~]# a=3
    bash: a: 只读变量
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果要取消怎么办? 退出当前的shell或者重新刷新shell,比如bash命令

    [root@mufeng41 ~]# bash
    [root@mufeng41 ~]# echo $a
    
    
    • 1
    • 2
    • 3

    2. 变量的使用案例

    [root@mufeng41 ~]# a=4
    [root@mufeng41 ~]# echo $a
    4
    
    
    • 1
    • 2
    • 3
    • 4

    总结

    本节我们探讨了shell脚本的变量,下一节我们一起探讨shell的变量使用案例。

  • 相关阅读:
    mkfifo函数 及 解决Linux下 “mkfifo: no such file or directory”
    1.3.2有理数减法(第一课时)作业设计
    数字图像处理之matlab常见函数
    使用python编写脚本测试目标主机的TCP端口连通性
    C/C++ vector模拟实现
    【JavaScript】聊聊js中关于this的指向
    89.(cesium篇)cesium聚合图(自定义图片)
    Fragment的使用方式
    (2)数据库mongodb 终端 和 vscode创建数据库 数据导入导出
    vue3+Echarts+Nodejs实现动态数据可视化
  • 原文地址:https://blog.csdn.net/wisdom_futrue/article/details/131313019