• 【博学谷学习记录】超强总结,用心分享|Shell变量总结


    变量类型

    1. 系统环境变量
    2. 自定义变量
    3. 特殊符号变量

    系统环境变量

    Shell的配置文件分类

    1. 全局配置文件 /etc/profile /etc/profile.d/*.sh /etc/bashrc
    2. 个人配置文件 当前用户/.bash_profile 当前用户/.bashrc

    一般情况下,我们都是直接针对全局配置进行操作。

    环境变量分类
    在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。
    系统级环境变量:Shell环境加载全局配置文件中的变量共享给所有用户所有Shell程序使用, 全局共享
    用户级环境变量:Shell环境加载个人配置文件中的变量共享给当前用户的Shell程序使用, 登录用户使用

    查看当前Shell系统环境变量

    命令:env

    [root@node1 export] env
    SHELL=/bin/bash
    HISTSIZE=1000
    USER=root
    ...省略
    [root@node1 export] 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    命令: set

    [root@node1 export] set
    ABRT_DEBUG_LOG=/dev/null
    BASH=/bin/bash
    BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    ...省略
    [root@node1 export]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    常用系统环境变量
    变量名称含义
    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
    [root@node1 export] echo $PATH
    :/export/server/jdk1.8.0_241/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/export/server/mysql-5.7.29/bin:/root/bin
    
    [root@node1 export] echo $HOME
    /root
    
    [root@node1 export] echo $SHELL
    /bin/bash
    
    [root@node1 export] echo $HISTFILE
    /root/.bash_history
    
    [root@node1 export] echo $PWD
    /export
    
    [root@node1 export] echo $OLDPWD
    /root
    
    [root@node1 export] echo $HOSTNAME
    node1
    
    [root@node1 export] echo $HOSTTYPE
    x86_64
    
    [root@node1 export] echo $LANG
    zh_CN.UTF-8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    自定义变量

    分类
    1. 自定义局部变量
    2. 自定义常量
    3. 自定义全局变量

    定义

    定义变量的语法
    var_name=hello
    变量定义规则

    1. 变量名称可以有字母,数字和下划线组成, 但是不能以数字开头
    2. 等号两侧不能有空格
    3. 在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算
    4. 变量的值如果有空格, 必须使用双引号括起来
    5. 不能使用Shell的关键字作为变量名称
    # 定义变量
    [root@node1 ~] name=熊猫同学呀
    
    • 1
    • 2

    使用

    查询变量的语法
    语法1: 直接使用变量名查询
    $var_name
    语法2: 使用花括号
    ${var_name}
    区别: 花括号方式适合拼接字符串

    [root@node1 ~] name=熊猫同学呀
    [root@node1 ~] echo "我是$name"
    我是熊猫同学呀
    [root@node1 ~] echo "我是$name的同学"
    我是熊猫同学呀的同学
    [root@node1 ~] echo "我是${name}haha"
    我是熊猫同学呀haha
    [root@node1 ~] echo "我是$namehaha"
    我是
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    注意: 如果我是$namehaha$name不带花括号, 系统会认为获取$namehaha 变量数据, 这个变量不存在就获取不到数据
    结论: 变量需要拼接字符的使用花括号

    变量删除

    删除变量的语法
    unset var_name

    [root@node1 ~] name=熊猫同学呀
    [root@node1 ~] echo $name
    熊猫同学呀
    [root@node1 ~] unset name
    [root@node1 ~] echo $name
    
    [root@node1 ~]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    特殊变量

    特殊变量:$n

    用于接收脚本文件执行时传入的参数
    $0 用于获取当前脚本文件名称的
    $n 用于获取第n个参数
    有些版本:
    $1~$9, 代表获取第一输入参数到第9个输入参数
    第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取出
    我的是centos7.7,不用加花括号也可以正常输出

    #!/bin/bash
    echo 脚本文件名:${0}
    echo 脚本接收的第1个参数:$1
    echo 脚本接收的第2个参数:$2
    echo 脚本接收的第3个参数:$3
    echo 脚本接收的第10个参数:${10}
    echo 脚本接收的第11个参数:$11
    
    [root@node1 ~] cat /etc/redhat-release 
    CentOS Linux release 7.7.1908 (Core)
    [root@node1 ~] sh demo.sh 1 2 3 4 5 6 7 8 9 10 11
    脚本文件名:demo.sh
    脚本接收的第1个参数:1
    脚本接收的第2个参数:2
    脚本接收的第3个参数:3
    脚本接收的第10个参数:10
    脚本接收的第11个参数:11
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    特殊变量:$#

    获取所有输入参数的个数

    #! /bin/bash
    
    echo 脚本文件名:${0}
    echo 脚本接收的第1个参数:$1
    echo 脚本接收的第2个参数:$2
    echo 脚本接收的参数个数:$#
    
    [root@node1 ~] sh demo.sh 1 2 3 
    脚本文件名:demo.sh
    脚本接收的第1个参数:1
    脚本接收的第2个参数:2
    脚本接收的参数个数:3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    特殊变量:$*$@

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

    #! /bin/bash
    
    echo '使用$*直接输出:'$*
    echo '使用$@直接输出:'$@
    
    echo '循环遍历输出不带引号$@所有参数'
    for item in $@
    do
       echo $item
    done
    
    echo '循环遍历输出不带引号$*所有参数'
    for item in $*
    do
       echo $item
    done
    
    echo '循环遍历输出带引号$*所有参数'
    for item in "$*"
    do
       echo $item
    done
    
    echo '循环遍历输出带引号$@所有参数'
    for item in "$@"
    do
       echo $item
    done
    
    
    [root@node1 ~] sh demo2.sh a b c 
    使用$*直接输出:a b c
    使用$@直接输出:a b c
    循环遍历输出不带引号$@所有参数
    a
    b
    c
    循环遍历输出不带引号$*所有参数
    a
    b
    c
    循环遍历输出带引号$*所有参数
    a b c
    循环遍历输出带引号$@所有参数
    a
    b
    c
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    特殊变量:$?

    用于获取上一个Shell命令的退出状态码, 或者是函数的返回值
    每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功
    一般来说, 返回0代表命令执行成功, 非0代表执行失败

    # 输入一个正确命令, 再输出`$?`
    [root@node1 ~] echo "hello"
    hello
    [root@node1 ~] echo $?
    0
    # 输入一个错误命令, 在输出`$?`
    [root@node1 ~] hello
    -bash: hello: 未找到命令
    [root@node1 ~] echo $?
    127
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    特殊变量:$$

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

    [root@node1 ~] echo $$
    107246
    [root@node1 ~] ps -aux|grep bash
    root     107246  0.0  0.0 116216  2944 pts/1    Ss   07:29   0:00 -bash
    root     107282  0.0  0.0 116096  2660 pts/2    Ss   07:29   0:00 -bash
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Shell变量总结

    变量类型
    1. 环境变量
    2. 自定义变量
    3. 特殊变量
    作用域
    1. 环境变量
      系统Shell配置文件提供, 全局都可以使用
    2. 自定义变量
      局部变量: 当前Shell可以使用
      全局变量: 当前Shell与子Shell可以使用
    3. 特殊变量
      全局都可以使用
    常用系统环境变量
    变量名称含义
    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

    常用系统特殊符号变量
    特殊变量含义
    $n获取传入脚本的第n个参数
    $#获取传入脚本的所有参数个数
    $*$@获取传入脚本的所有参数
    $?上一条命令的返回值
    $$当前进程的PID
  • 相关阅读:
    编程式事务之基于XML的声明式事务控制
    深度学习100例 —— 卷积神经网络(CNN)识别眼睛状态
    酸酸甜甜的杨梅数据库
    基于 VMware workstation 16 安装 Linux CentOS 8 操作系统(超详细教程)
    mysql 的语法(1)
    nginx知识点-1
    AutoSAR EcuM系列03- Flex EcuM的状态管理
    开发笔记 —— Centos7 在急救模式下修改密码
    Java笔记-使用processBuilder调用shell(Linux)
    硅芯思见:【143】问芯吾跬(IC设计验证常见问题汇总二)
  • 原文地址:https://blog.csdn.net/xz842913787/article/details/126566105