shell脚本变量基础

3 变量

3.1 变量的定义

【定义】变量表示命名的内存空间,将数据放在内存空间中,通过变量名引用,获取数据

=

3.2 变量类型

变量类型(按定义方式):

  • 内置变量,如:PS1,PATH,HISTSIZE
  • 用户自定义变量

=

不同的变量存放的数据不同,决定了:

  • 数据存储方式
  • 参与的运算
  • 表示的数据范围

=

变量数据类型

  • 字符
  • 数值:整型、浮点型(bash 不支持浮点数)

=

3.3 编程语言分类

静态和动态语言
静态编译语言:使用变量前,先声明变量类型,之后类型不能改变,在编译时检查,如:java,c
动态编译语言:不用事先声明,可随时改变类型,如:bash,Python

强类型和弱类型语言
强类型语言:不同类型数据操作,必须经过强制转换才同一类型才能运算,如java , c# ,python
弱类型语言:语言的运行时会隐式做数据类型转换。无须指定类型,默认均为字符型;参与运算会
自动进行隐式类型转换;变量无须事先定义可直接调用;如:bash ,php,javascript

bash 是动态编译、弱类型语言


=

3.4 Shell 中变量命名法则

  1. 不能使程序中的保留字(if,for)和内置变量
  2. 只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”
  3. 见名知义,用英文名字,并体现出实际作用
  4. 统一命名规则:驼峰命名法, studentname,大驼峰StudentName 小驼峰studentName
  5. 变量名大写
  6. 局部变量小写
  7. 函数名小写

=

3.5 变量定义和引用

1 按作用范围分类

根据变量的生效范围划分:

  • 普通变量:生效范围为当前shell进程
    对其它shell进程(包括当前shell的子shell进程)均无效
  • 环境变量:生效范围为当前shell进程及其子进程
  • 本地变量:生效范围为当前shell进程中某代码片断,通常指函数

=

2 变量赋值方式

name='value'

# value 可以是以下多种形式
直接字串:name='root'
变量引用:name="$USER"
命令引用:name=`COMMAND` 或者 name=$(COMMAND)

# 多行赋值:
name="
[root@centos8/~]# NAME="jack
> tom
> poly
> "
[root@centos8/~]# echo $NAME
jack tom poly

3 变量追加赋值

NAME+=    追加赋值
[root@centos8/data]# NAME+='zhubazi'
[root@centos8/data]# echo $NAME
caokunzizhubazi

=

4 变量引用

引用格式

$name
${name}
# 连续输入变量,为防止混淆误判,必须使用{ }来表示完整变量
比如
[root@centos8/data]# echo $AGE
24
[root@centos8/data]# echo $NAME_$AGE
24
[root@centos8/data]# echo ${NAME}_$AGE
caokunzi_24

# 无特殊要求时,直接输入空格隔开即可
[root@centos8 ~]# NAME=jack
[root@centos8 ~]# AGE=34
[root@centos8 ~]# echo $NAME $AGE
jack 34

=

5 弱引用和强引用

记忆:单引号六亲不认

  • "$name" 弱引用,其中的变量引用会被替换为变量值
  • '$name' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
[root@centos8/data]# echo "$NAME"
caokunzi
[root@centos8/data]# echo '$NAME'
$NAME

# 注:反单引号表示单行赋值中的命令引用

=

6 引用命令执行结果

注意加不加引号的区别

[root@centos8 ~]# CMD=`hostname`    # 反引号表示执行命令,将执行结果赋值!!!
[root@centos8 ~]# $CMD
-bash: centos8: command not found
[root@centos8 ~]# echo $CMD
centos8

[root@centos8/~]# CMD=hostname      # 表示直接将命令本身赋值!!!
[root@centos8/~]# $CMD         
centos8
[root@centos8/~]# echo $CMD
hostname

=

7 变量的定义与删除

set 显示已定义的所有变量
unset NAME 删除变量
# 若在子shell中用unset删除自定义环境变量,父shell中不会失效

=wan

上一篇:创建本地yum仓库


下一篇:R语言安装包,切换镜像