一、什么是变量
1、以固定名称存储的可能会发生变化的值;
2、能够根据需求提高脚本的环境变化适应能力;
3、在脚本执行中多次被使用。
二、变量的定义与赋值
格式:变量名=变量值
注意:若变量名已存在,则相当于重新赋值
等号两边不能有空格
变量名称由字母/下划线/数字组成,区分大小写
变量名不能永数字开头,不能由保留字和特殊字符
[root@localhost ~]# x=123
[root@localhost ~]# var1=你好
[root@localhost ~]#
三、查看/引用变量
格式:
1、引用变量: $变量名
2、查看变量值: echo $变量名 、 echo ${变量名}
3、未定义的变量,当执行查看变量命令时,无变量值回显
[root@localhost ~]# echo $x
123
[root@localhost ~]# echo $var1
你好
[root@localhost ~]# echo ${var1},世界!
你好,世界!
四、取消变量
退出定义变量的shell环境时,变量会自动失效
在环境内手动取消: unset 变量名1 变量名2 变量名3
[root@localhost ~]# unset x
[root@localhost ~]# echo $x
[root@localhost ~]#
五、变量的类型
1、按存储类型分类:整数型、浮点型、双精度浮点型、字符型
shell不作为高级编程语言,对存储类型的要求比较松散
2、按照使用类型分类
类型 | 说明 |
环境变量 | 变量名通常未大写,由系统维护,用来设置工作环境,其中只有个别变量用户可以直接更改 |
位置变量 | 由bash内置,用来存储在执行脚本时提供的命令行参数 |
预定义变量 | 由bash内置,一类由特殊用途的变量,可以直接调用,但不能直接复制或者是修改 |
自定义变量 | 由用户自行设置,直接修改使用 |
六、环境变量
配置文件:/etc/profile 、 ~/.bash_profile(只对当前用户生效)
相关操作:env :列出所有的环境变量
set :列出所有变量
常见环境变量:PWD、PATH、USER、LOGNAME、UID、SHELL、HOME、PS1、PS2
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $UID
0
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]#
七、位置变量
在执行脚本时提供的命令行参数
表示: $n ,n为序号,n不能=0
$1 、$2 \ ...... \ ${10}
//test脚本内容
[root@localhost ~]# cat test.sh
#!/bin/bash
systemctl $1 firewalld
//使用test脚本查看防火墙状态
[root@localhost ~]# ./test.sh status
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2024-06-14 16:06:58 EDT; 1min 16s ago
Docs: man:firewalld(1)
Main PID: 3047 (firewalld)
Tasks: 2 (limit: 4904)
Memory: 24.4M
CGroup: /system.slice/firewalld.service
└─3047 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
Jun 14 16:06:57 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Jun 14 16:06:58 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Jun 14 16:06:58 localhost.localdomain firewalld[3047]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be remove>
lines 1-13/13 (END)
八、预定义变量
· 用来保存脚本程序的执行信息
不能直接使用这些变量、不能直接为这些变量赋值
变量名 | 解释 |
$0 | 当前所在的进程或者是脚本名 |
$$ | 当前进程的PID编号 |
$? | 命令执行后的返回状态码,0便是正常,不为0表示异常 |
$# | 已加载的位置变量个数 |
$* | 所有位置变量的值 |
九、自定义变量
脚本编写人员自行定义的变量值,遵循变量定义与赋值规则即可。
十、练习
1、编写创建用户的通用脚本。