(2)、shell编程之变量
变量:可以变化的量
变量可以由数字、字母、下划线组成,但不可以以数字开头
在shell里变量默认类型都是字符串,如果要进行运算,必须要指定变量类型为数值型;调用变量在变量名前加上$号即可($ 变量名)。
变量赋值用“=”连接,且等号左右两边不能存在空格,如果变量值中有空格需要用单引或者双引号包括。
在变量值中,可以使用“\”转义符。
[root@CAT ~]# a=3 #把3赋值给变量a [root@CAT ~]# echo $a 3
如果需要增加变量的值,则可以进行变量值叠加,不过变量需要用双引号包括 "$变量名"或${变量名},类似于 ">>" 追加
[root@CAT ~]# a="$a"45 [root@CAT ~]# echo $a 345 或 [root@CAT ~]# a=${a}678 [root@CAT ~]# echo $a 345678
如果要把命令的结果作为变量值赋予变量,则需要只用反引号或$()包括:
[root@CAT ~]# a=$(date) [root@CAT ~]# echo $a 2021年 04月 26日 星期一 10:40:50 CST
变量分类:
类型 | 定义 | 名称自定义 | 作用自定义 | 内容自定义 |
用户自定义变量 | 由用户自定义名和值的变量 | √ | √ | √ |
用户自定义环境变量 | 主要用来保存和系统环境相关的数据 | √ | √ | √ |
系统自带环境变量 | ╳ | ╳ | √ | |
位置参数变量 | 主要用来向脚本当中传递参数或数据 | ╳ | ╳ | √ |
预定义变量 | 在Bash中已经定义好的变量 | ╳ | ╳ | √ |
用户自定义变量使用规则
赋值 | 变量名=值 |
调用 | $变量名 |
查看 |
set [选项] -u:设定此选项后,调用未声明的变量时会报错(默认无提示,仅临时生效) 不加任何选项,将会列出当前系统所有变量 |
删除 | unset 变量名 |
更改 | 直接覆盖 |
环境变量使用规则
定义 | export 变量名=值 #定义环境变量时一般使用大写变量名,为了区分,这也是程序员默认熟成的规则 用户自定义环境变量时需要用export声明 |
调用 | $变量名 |
查看 | env 查看所有的环境变量 |
删除 | unset 变量名 |
更改 | 直接覆盖 |
常见的环境变量:
PATH:系统查找命令的路径
PS1:定义命令提示符
LANG:定义Linux系统的主语系环境
位置参数变量
变量名 | 作用 |
$n |
n为数字,$0代表命令本身,$1-$9 代表1-9个参数,10及以上的参数需要用{}包括,eg:${10} |
$* | 代表命令中所有参数,$*把所有参数看成是一个整体 |
$@ | 代表命令中所有参数,$@把所有参数区分对待 |
$# | 代表命令行中所有参数的个数 |
预定义变量
变量名 | 作用 |
$? | 捕获最后一次执行命令的返回值,若为0则证明命令执行成功,若为非0数值,则证明命令执行失败 |
$$ | 当前进程的PID |
$! | 后台运行的最后一个进程的PID |
键盘的输入(交互式shell):
# read [选项] [变量名]
选项 | 意义 |
-p "提示信息" | 等待输入时,输出的提升信息 |
-t秒数 | 等待用户输入的时长,超时退出,若不加则一直等待 |
-n字符数 | 字符数,read只接受指定的字符数 |
-s | 隐藏输入的数据,用于保密类信息输入 |