变量的定义

返回主页

一、变量是什么?

变量:变量就是用来临时保存数据的,并且是可以变化的数据。

二、 什么时候需要使用变量

  • 如果脚本需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容。这样在修改内容的时候,仅仅需要修改变量的值。
  • 在脚本运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量。

三、 如何定义变量?

变量名=变量值

[root@converts shells]# name='胖太乙'            # 定义变量名 name
[root@converts shells]# echo $name              # 读取变量名 name 中的值
胖太乙
[root@converts shells]# echo ${name}            # 读取变量名 name 中的值
胖太乙
[root@converts shells]# unset name              # 取消变量
[root@converts shells]# echo $name

[root@converts shells]#

四. 变量的定义规则

1、变量名区分大小写

[root@converts shells]# name='胖太乙'
[root@converts shells]# Name='Big胖太乙'
[root@converts shells]# echo $name
胖太乙
[root@converts shells]# echo $Name
Big胖太乙
[root@converts shells]#

2、变量名不能有特殊符号

[root@converts shells]# *name='胖太乙'
-bash: *name=胖太乙: command not found
[root@converts shells]# &name='胖太乙'
-bash: syntax error near unexpected token `&'

3、变量名不能以数字开头

[root@converts shells]# 1name='胖太乙'
-bash: 1name=胖太乙: command not found
[root@converts shells]#

4、等号两边不能有任何空格

[root@converts shells]# name = '胖太乙'
-bash: name: command not found

五、变量的自定义方式有那些?

1、基本方式

$变量名${变量名} 的区别:

  • 相同点: 都可以调用变量
  • 不同点: ${变量名} 可以只截取变量值的某一部分, 而$变量名不行。
[root@converts shells]# name='胖太乙'
[root@converts shells]# echo $name
胖太乙
[root@converts shells]# echo ${name:1:2}
太乙
[root@converts shells]#

2、命令执行结果赋值给变量

# 获取当前系统的时间
[root@converts shells]# time=`date +%F`
[root@converts shells]# echo $time
2021-12-10

# 获取系统版本信息
[root@converts shells]# version=$(uname -r)
[root@converts shells]# echo $version
4.18.0-305.3.1.el8.x86_64
[root@converts shells]#

3、交互式定义变量(read)

目的: 让用户自己 给变量赋值,比较灵活。
语法:read [选项] 变量名

常见选项:

选项 释义
-p 定义提示用户的信息
-n 定义字符数(限制变量值的长度)
-s 不显示(不显示用户输入的内容)
-t 定义超时时间,默认单位为秒(限制用户输入变量值的超时时间)
# 1.普通用法
[root@converts shells]# read name
胖太乙
[root@converts shells]# echo $name
胖太乙

# 2.带有提示信息的用法
[root@converts shells]# read -p '你的博客名称叫什么?' name
你的博客名称叫什么?胖太乙
[root@converts shells]# echo $name
胖太乙
[root@converts shells]#

拓展:变量值来自于某个文件

[root@converts shells]# cat user.txt 
张三 15岁
李四 30岁
胖太乙  1000岁

[root@converts shells]# read name age < user.txt 
[root@converts shells]# echo $name
张三
[root@converts shells]# echo $age
15岁
[root@converts shells]#

4、定义有类型的变量(declare)

目的: 给变量做一些限制,固定变量的类型,比如:整型、只读
用法: declare 选项 变量名=变量值

常用选项:

选项 释义 举例
-i 将变量看成整数 declare -i A=123
-r 定义只读变量 declare -r B=hello
-a 定义普通数组;查看普通数组
-A 定义关联数组;查看关联数组
-x 将变量通过环境导出 declare -x AAA=123456 等于 export AAA=123456

六、变量的分类

1、本地变量

当前用户自定义的变量。当前进程 中有效,其他进程及当前进程的子进程无效。

2、环境变量

  • 环境变量: 当前进程有效,并且能够被子进程调用。
    • env:查看当前用户的环境变量
    • set:查询当前用户的所有变量(临时变量与环境变量)
    • export:变量名=变量值 或者 变量名=变量值;export 变量名
[root@converts shells]# export name='胖太乙'        # 临时将一个本地变量(临时变量)变成环境变量
[root@converts shells]# env | grep ^name
name=胖太乙
[root@converts shells]#

3、全局变量

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

解读相关配置文件

文件名 说明 备注
$HOME/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等
$HOME/.bash_profile 当前用户的环境变量,用户登录时读取
$HOME/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等
/etc/bashrc 全局的bash信息,所有用户都生效
/etc/profile 全局环境变量信息 系统和所有用户都生效
$HOME/.bash_history 用户的历史命令 history -w 保存历史记录 history -c 清空历史记录

4、系统变量

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

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

5、测试

# 有一个Demo.sh 的脚本文件, 脚本内容如下
[root@converts shells]# cat Demo.sh 
#!/bin/bash
echo "\$0 = $0"
echo "\$# = $#"
echo "\$* = $*"
echo "\$@ = $@"
echo "\$1 = $1" 
echo "\$2 = $2" 
echo "\$3 = $3" 
echo "\$11 = ${11}" 

# 无参执行
[root@converts shells]# ./Demo.sh 
$0 = ./Demo.sh
$# = 0
$* = 
$@ = 
$1 = 
$2 = 
$3 = 
$11 = 

# 带1个参数执行脚本
[root@converts shells]# ./Demo.sh 1
$0 = ./Demo.sh
$# = 1
$* = 1
$@ = 1
$1 = 1
$2 = 
$3 = 
$11 = 

# 带2个参数执行脚本
[root@converts shells]# ./Demo.sh 1 2
$0 = ./Demo.sh
$# = 2
$* = 1 2
$@ = 1 2
$1 = 1
$2 = 2
$3 = 
$11 = 

# 带3个参数执行脚本
[root@converts shells]# ./Demo.sh 1 2 3
$0 = ./Demo.sh
$# = 3
$* = 1 2 3
$@ = 1 2 3
$1 = 1
$2 = 2
$3 = 3
$11 = 

# 带12个参数执行脚本
[root@converts shells]# ./Demo.sh 1 2 3 4 5 6 7 8 9 10 11 12
$0 = ./Demo.sh
$# = 12
$* = 1 2 3 4 5 6 7 8 9 10 11 12
$@ = 1 2 3 4 5 6 7 8 9 10 11 12
$1 = 1
$2 = 2
$3 = 3
$11 = 11
[root@converts shells]#
展开/折叠菜单
132 预览数量 2024-03-25 17:25:09 发布 时间
目录
赞数量
评论数量
返回顶部
暂无评论

暂无评论