bash变量有多少种?

2023-08-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

上一篇 下一篇

猜你喜欢

热点阅读