美文网首页
bash变量有多少种?

bash变量有多少种?

作者: 雨景江水 | 来源:发表于2023-08-11 22:11 被阅读0次

    讲环境变量的另外几个好的视频:
    https://www.bilibili.com/video/BV1pZ4y1N7pr?p=2
    该视频的笔记连接:https://www.freecplus.net/ebfb46a0f8014f59a16c78ec8de73468.html

    零.

    1. 定义的变量方式只有两种语法:
      a=111

      export a=11111

    如果是写在配置文件里面的变量,注意:写在配置文件里面的变量都是用export定义的,如果不带export,那么只能在配置文件里面使用,外面用不了

    1. a=111 这种方式定义的变量,当前进程中有效,其他进程及当前进程的子进程无效
      也就是说,切换了用户、当前子shell(比如shell脚本)、切换窗口(一个窗口就是一个shell进程)等都看不到这个变量

    3.export a=11111 这种方式定义的变量,同一个shell窗口下的同一个用户才可以看到,别的用户看不到的(你登录别的用户相当于退出当前用户进程了,进入到另外的进程了),子shell(也就是当前窗口运行的shell脚本,这个是子进程) 也可以看到

    注1:重新打开一个shell窗口,相当于又用root用户登录了一遍Linux服务器

    另外的窗口,不管什么用户,都看不到

    注2:之前的测试有问题, su - 这个命令才是登录其他用户并且使用了该用户的环境变量

    一.
    用户自定义变量(本地变量):当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效
    注1:切换用户在回来,这个变量就没了
    注2:export定义的变量,关闭了窗口 或者 退出当前用户 才会消失

    一般自己定义的变量都是本地变量

    定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115
    引用变量: 变 量 名 或 {变量名}
    查看变量:echo $变量名 set(所有变量:包括自定义变量和环境变量)
    取消变量:unset 变量名
    作用范围:仅在当前Shell中有效

    注1:什么叫做当前Shell? 答:一个窗口就是一个shell,不同的窗口是不同的shell,可以理解为一个shell进程
    ps -aux|grep bash : 每新增一个窗口,就会有一个bash进程出现
    bin/bash这个进程默认就是有两个的

    比如:
    在当前窗口创建了变量a ,任何一个shell文件是调用不到变量a的,因为shell文件用的是当前窗口的子进程

    二.局部环境变量
    局部环境变量 :当前进程有效,并且能够被子进程调用(在所有子shell里面都可以调用)

    局部环境变量是针对某个用户的某个窗口的:
    1.同一个用户不同窗口:
    ①这个是有共同的环境变量的,这种是在配置文件里面,可以用env查看,你会发现不同窗口 或者 不同的用户 或者 不同窗口的不同用户 ,他们有些环境变量是一样的
    ②同一个窗口下,用export定义的局部环境变量,别的用户是看不到的
    一个用户在一个窗口下用export创建的局部环境变量,在另外的窗口,用同一个用户登录,是看不到的
    ③export创建的变量,关闭掉窗口就没有了

    2.不同用户之间的环境变量不可以互相调用,这个排除掉全局环境变量和一些共同都有的环境变量

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin : 系统查找命令的路径

    env查看当前用户可以看到(可以看到就可以调用)的环境变量,全局环境变量 和 本地变量 是不打印出来的(这个可以用set看)
    set命令查询当前用户的所有变量(临时变量与环境变量)

    定义局部环境变量的方法:
    export 变量名=变量值 ;
    或者 declare -x 变量名=变量值

    还可以先定义一个本地变量:a=111
    export a    #把本地变量变成了环境变量
    注意:这种定义的环境变量也是临时的,关闭掉窗口就没有了,要永久的,就必须写入到配置文件里面去
    

    比如:
    创建一个变量a=110 , 执行export a ,把a设置成当前的环境变量,
    那么,在当前窗口运行的shell文件都能够调用到这个a变量

    每个用户家目录下都有的配置文件,读取后都是用户的环境变量:
    文件名 说明 备注
    ~/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等

    ~/.bash_profile 当前用户的环境变量信息,用户登录时读取

    ~/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等

    ~/.bash_history 当前用户的历史命令 history -w保存历史记录 history -c清空历史记录

    三.全局环境变量
    全局环境变量 : 所有的用户和程序都能调用,且继承,新建的用户也默认能调用.

    文件名 说明 备注
    ~/.bashrc 当前用户的bash信息,用户登录时读取 局部。定义别名、umask、函数等

    ~/.bash_profile 当前用户的环境变量信息,用户登录时读取 局部。

    ~/.bash_logout 当前用户退出当前shell时最后读取 局部。定义用户退出时执行的程序等

    ~/.bash_history 当前用户的历史命令 局部。history -w保存历史记录 history -c清空历史记录

    /etc/bashrc 全局的bash信息 全局。所有用户都生效

    /etc/profile 全局环境变量信息 全局。系统和所有用户都生效

    说明:以上文件修改后,都需要重新source让其生效或者退出重新登录。

    注意1:/etc/bashrc 和 /etc/profile 这两个文件不建议乱动

    用户登录系统读取相关文件的顺序

    /etc/profile

    $HOME/.bash_profile

    $HOME/.bashrc

    /etc/bashrc

    $HOME/.bash_logout

    说明:本地变量、局部环境变量、全局环境变量是根据变量的作用域来区分的。

    四.系统变量
    系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用.

    常用的:
    $? 上一条命令执行后返回的状态码
    当前所在进程的进程号,如echo

    内置变量 含义
    $? 上一条命令执行后返回的状态码;状态码值为0表示执行正常,非0表示执行异常或错误
    状态值为0表示执行正常:就是能够正常执行完命令

    注1:上一条命令 指的不仅仅是类似于 ls 等这种简单的命令,还可以是:
    [ 1 -lt 2 ] && [ 2 -lt 3 ] 这种复合命令

    0 当前执行的程序或脚本名# 脚本后面接的参数的个数
    * 脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开@ 脚本后面所有参数,参数是独立的,也是全部输出
    1~9 脚本后面的位置参数,1表示第1个位置参数,依次类推{10}~{n} 扩展位置参数,第10个位置变量必须用{}大括号括起来(2位数字以上扩起来) $$ 当前所在进程的进程号,如echo $$! 后台运行的最后一个进程号 (当前终端)
    !$ 调用最后一条命令历史中的参数

    1.位置参数变量
    进一步了解位置参数1~{n}

    !/bin/bash

    了解shell内置变量中的位置参数含义

    1.sh 文件里面:
    echo "$0 = 0" echo "\# = #" echo "\* = *" echo "\@ = @" echo "\1 = 1" echo "\2 = 2" echo "\3 = 3" echo "\11 = {11}" echo "\12 = ${12}"

    执行1.sh文件

    1. 进一步了解*和@的区别
      *:表示将变量看成一个整体@:表示变量是独立的

    !/bin/bash

    for i in "@" do echoi
    done

    echo "======我是分割线======="

    for i in "*" do echoi
    done

    [root@MissHou ~]# bash 3.sh a b c
    a
    b
    c
    ======我是分割线=======
    a b c

    相关文章

      网友评论

          本文标题:bash变量有多少种?

          本文链接:https://www.haomeiwen.com/subject/ralowktx.html