变量

定义:用来临时保存数据,该数据就是可以变化的数据.

使用变量名=变量值

变量名:临时保存数据的

变量值:临时的可变化的数据

[root@Computer ~]# A=Hello        定义变量A
[root@Computer ~]# echo A          调用变量A,要给钱"$"
A
[root@Computer ~]# echo $A        正确调用
Hello
[root@Computer ~]# echo ${A}      也可以这样调用
Hello
[root@Computer ~]# A=world        更换变量
[root@Computer ~]# echo $A       
world 
[root@Computer ~]# unset A          取消变量
[root@Computer ~]# echo $A         没有结果

命名规则

  • 变量名区分大小写
  • 变量名不能包含特殊符号(包含空格的可以用""号括起来)
  • 变量名不能以数字开头
  • 等号两边不能有任何的空格
  • 变量名应该做到见名知意

定义方式

  • $A与${A}的区别
    • ${A}可以截取变量
    • 格式:${A:开始位:截取数量}
  •  [root@Computer ~]# A=12345
     [root@Computer ~]# echo ${A:2:3}
     345
  • 命令执行结果赋予给变量
    • 格式:变量名=命令(反撇号_Tab上面的那个符号) 或 变量名=$(命令)

交互式定义变量
1.用户自己定义
目的:让用户自己给变量赋值,比较灵活。
语法:read [选项] 变量名
常见选项:

选项 作用
-p 定义提示用户信息
-n 定义字符数(限制变量值长度)
-s 不显示用户输入的内容
-t 定义超时时间,默认单位为秒

2.从文件获取变量:输入重定向

[root@Computer ~]# vim ip.txt
[root@Computer ~]# cat ip.txt
10.0.0.1
[root@Computer ~]# read -p "请输入IP地址:" ip < ip.txt
[root@Computer ~]# echo $ip
10.0.0.1

定义有类型的变量(declare)
目的:给变量定义类型
用法:declare 选项 变量名=变量值
常用选项:

选项 作用 举例
-i 定义为整数 declare -i A=123
-r 定义为只读变量 declare -r B=hello
-a 定义普通数组,查看普通数组
-A 定义关联数组,查看关联数组
-x 将变量通过环境导出 declare -x C=123 等于 export C=123

变量分类

  • 本地变量:当前用户自定义的变量,当前进程有效,其他进程中及当前进程的子进程无效。
  • 环境变量:当前进程有效,并且能被子进程调用
    • env查看当前用户的环境变量
    • set查询当前用户的所有变量(临时变量与环境变量)
    • export 变量名=变量值
  • 全局变量:全局所有用户都可以调用,新建用户也可以调用
    • 解读解读相关配置文件
文件名 说明 备注
$HOME/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等
$HOME/.bash_profile 当前用户的环境变量,用户登陆时读取
$HOME/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等
/etc/bashrc 全局bash信息,所有用户均生效
/etc/profile 全局环境变量信息 系统和所有用户都生效

说明:以上文件更改后,都要重新source让其生效或重新登录

  • 用户登录系统读取文件顺序
    1. /etc/profile
    2. $HOME/.bash_profile
    3. $HOME/.bashrc
    4. /etc/bashrc
    5. $HOME/.bash_logout
  • 系统变量(内置bash中的变量):shell本身已经固定好了他的名字和作用
内置变量 含义
$? 上一条命令的返回状态,为0表示正常,非0表示异常或错误
$0 当前执行的程序或脚本名
$# 脚本后面接的参数的个数
$* 脚本后面所有的参数,参数当成一个整体输出,每一个变量参数间以空格相隔
$@ 脚本后面所有参数,参数是独立的,也是全部输出
$1~$9 脚本后面的位置参数,$1表示第一个位置的参数
$(10)-$(n) 扩展位置参数,第10个位置变量必须用{}括起来
$$ 当前所在进程的进程号
$! 后台运行的最后一个进程号
!$ 调用最后一条命令历史中的参数
Last modification:May 25th, 2020 at 09:39 am
如果觉得我的文章对你有用,请随意赞赏