Linux Shell 003-变量
本节关键字:Linux、Shell、变量、全局变量、系统变量
相关指令:read、echo、unset、export
变量的含义
- 变量是用来临时保存数据的,该数据是可以变化的数据。
- 如果某个内容需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容,这样在修改内容的时候,仅仅需要修改变量的值。
- 在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量。
变量的定义
定义变量:变量名=变量值
取消变量:unset 变量名
说明:变量名用来临时保存数据,变量值是临时的可变化的数据
变量的命名规则
- 变量名区分大小写
- 变量名不能有特殊符号
- 变量名不能以数字开头
- 等号两边不能有任何空格
- 变量名尽量做到见名知意
变量的定义方式
基本定义方式,直接复制给一个变量
# $A与${A}的区别
A=12345
echo $A
echo ${A:2:3}
# 将命令执行结果赋值给变量
A=`hostname`
A=$(uname -r)
交互式定义变量,使用read命令
语法
read [选项] 变量名
常用选项
选项 | 说明 |
---|---|
-p | 定义提示用户的信息 |
-n | 定义字符数 |
-s | 不显示用户输入的内容 |
-t | 定义超时时间,默认单位为秒 |
使用示例
$ read -p "Input your name:" name
$ read -s -p "input your password" passwd
$ read -s -n 5 -p "input your password" passwd
$ read -s -t 5 -n 5 -p "input your password" passwd
变量值来自文件,使用read命令
语法
read [选项] 变量名 < 文件名
使用示例
$ cat test
192.168.203.66 255.255.255.0
$ read ip mask < test
$ echo $ip
192.168.203.66
$ echo $mask
255.255.255.0
定义有类型变量 - 使用declare
语法
declare [选项] 变量名=变量值
常用选项
选项 | 说明 |
---|---|
-i | 将变量看成整数 |
-r | 定义只读变量 |
-a | 定义普通数组;查看普通数组 |
-A | 定义关联数组;查看关联数组 |
-x | 将变量通过环境导出,等价于export |
使用示例
$ declare -i A=123
$ echo $A
123
$ A=hello
$ echo $A
0
$ declare -r B=hello
$ echo $B
hello
$ B=world
-bash: B: readonly variable
$ unset B
-bash: unset: B: cannot unset: readonly variable
变量的分类
本地变量
概念:当前用户自动以的变量,当前进程中有效,其他进程及当前进程的子进程无效
环境变量
概念:当前进程有效,并且能够被子进程调用(进程树 ps auxf | grep 进程名)
命令 | 说明 |
---|---|
env | 查看当前用户的环境变量 |
set | 查询当前用户的所有变量 |
export | 变量名=变量值 或者 变量名=变量值;export 变量名 |
全局变量
概念:全局所有的用户和程序都能调用,且集成,新建的用户也默认能调用
相关配置文件:
文件名 | 说明 |
---|---|
$HOME/.bashrc | 当前用户的bash信息,用户登录时读取,如:定义别名、umask、函数等 |
$HOME/.bash_profile | 当前用户的环境变量,用户登录时读取 |
$HOME/.bash_logout | 当前用户退出当前shell时读取,如:定义用户退出时执行的程序等 |
$HOME/.bash_history | 用户的历史命令,history -w 保存历史记录; history -c 清空历史记录 |
/etc/bashrc | 全局的bash信息,对所有用户都生效 |
/etc/profile | 全局环境变量信息,对系统和所有用户都生效 |
注意:以上文件修改后,都需要重新加载,可以使用source命令、.命令或退出重新登录,例如:
$ source $HOME/.bashrc
$ . $HOME/.bashrc
用户登录系统读取相关文件的顺序
(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 − {10}- 10−{n} | 脚本后面的位置参数扩展,从第10个位置开始,后面的位置数字必须用大括号{}括起来(2为数字以上括起来) |
$$ | 当前进程的进程号 |
$! | 当前终端,后台运行的最后一个进程的进程号 |
!$ | 调用历史最后一条命令中的参数 |
补充:转义字符为 \,查看后台运行的进程指令为jobs