1、变量的定义
- 变量即在程序运行过程中它的值是允许改变的量
- 变量是用一串固定的字符来标示不固定的值的一种方法
- 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储 Script 运行时可更改的程序信息
- 在 shell 中变量是不能永久保存在系统中的,必须在文件中声明
2、变量的命名规则
- 变量名称中通常包含大小写字字母,数字,下划线
- 变量名必须以字母或下划线开头,变量名的长度不能超过255个字符。
3、变量的调用
echo $变量名称
echo ${变量名称}
4、变量的种类
在 shell 中变量分为环境级变量,用户级变量,系统级变量。
1 环境级变量
a=8 #该定义方式之能在当前shell中使用。
[root@client mnt]# vim test.sh
[root@client mnt]# cat test.sh
#!/bin/bash
echo $a #编写脚本 输出变量a的值
[root@client mnt]# a=8 #定义变量
[root@client mnt]# echo $a #当前shell中调用变量的值输出
8 #输出结果
[root@client mnt]# sh test.sh #该方式运行脚本 会在当前shell中开启一个子shell 运行
#所以无法输出a的值
export a=8 #定以环境变量,可以在当前shell以及其子shell中使用改变变量
[root@client mnt]# export a=5 # 定义环境变量
[root@client mnt]# echo $a #当前shell中调用变量的值
5
[root@client mnt]# sh test.sh # 运行脚本在但前的子shell中调用变量
5
2、用户级变量
定义的环境级变量,在当前shell关闭之后无法使用。可以定义用户级变量,只要时该用户使用shell 就可以一直使用该变量。
vim /root/.bash_profile
#修改用户家目录下的.bash_profile 文件。
export a=8
#在文件中定义变量(增加一行)
source /root/.bash_profile
# 扫描文件 加载新增配置
[root@client ~]# echo $a #设置完成后直接使用变量 输出值
8
[root@client ~]# su - student # 切换到其他用户之后,无法使用该变量
[student@client ~]$ echo $a # 无法使用
3、系统级变量
定以系统级变量,系统中的所有用户均可以任何shell中使用该变量。
注意:用户级变量的优先级高于系统级,因为用户级的配置文件后读
vim /etc/profile
# 编辑系统文件
export a=5
# 文件中增加一行定义变量
source /etc/profile
#修改之后一定要source重新加载文件
[root@client ~]# echo $a # 定义完成之后 超级用户可以使用该变量
5
[root@client ~]# su - student #切换到普通用户
Last login: Thu May 16 09:01:35 EDT 2019 on pts/0
[student@client ~]$ echo $a # 普通用户也可以使用该变量
5
4、PATH 环境变量
PATH 环境变量:用来指定系统查找存放命令的目录。
例如存在一个脚本在/mnt中,无法在别的目录中使用脚本名称直接运行该脚本,将/mnt 添加到PATH 环境变量 中去之后,就可以使用该脚本名称直接运行该脚本。
相当于告诉系统可以在/mnt寻找该脚本。
5、字符的转译
对于在系统中存在特定意义的字符以及字符串 在使用的时候会造成冲突,达不到预期的效果,使用转译可以忽略其特定的意义,只是把其当作字符进行处理。
\ 转译单个字符
"" 弱引用,批量转义 “” 中出现的字符,
'' 强引用,批量转义 ” 中出现的字符
'' 与"" 两者的区别在于,"" 不能转义 "\","`","!","$"
${} 变量声明,表明括号中的内容为变量名称
6、变量值的传递
1 、 $n的方式
$1 脚本后的第一串字符串
$2 脚本后的第二串字符串
$3 脚本后的第三串字符串
$# 脚本后所跟字符串的个数
$* 脚本后跟的所有字符串,模式为“ 1 2 3 ” 输出一个字符串
$@ 脚本后跟的所有字符串,模式为“1”“2”“3”输出多个字符串
$$ 当前进程的pid
$0 该脚本文件的名称
2、read 的方式
该方式需要交互式输入变量的值
read name
#定义变量name 接下来需要输入变量的值
read -s name
# 定义变量name 接下来需要输入变量的值 -s 输入的值加密不显示
read -p "input username" name
# -p 先输出 引号中的内容 然后需要输入变量name的值
7、linux 系统中命令别名的设定
1 只能在当前环境中使用的别名
alias shijian=“date” #直接在命令行中输入 设定当前shell中的命令别名
2 设定某一个用户可以永久使用的命令别名
vim /root/.bashrc
# 编辑用户家目录下的 .bashrc 文件
alias shijian="date"
# 写入设定命令别名
source /root/.bashrc
#重新加载添加配置
3 设定系统中用户都可以使用的命令别名
vim /etc/bashrc
#编辑配置文件
alias shijian="date"
# 写入设定命令别名
source /etc/bashrc
#重新加载添加配置
4 取消系统中命令的别名
1 删除文件中的设定。
2 unalias shijian
# 删除系统已经加载的配置
8、利用命令执行结果设定变量
将命令运行的结果赋值给变量 的两种方式:
$?
命令执行之后产生的退出值,范围是[0−255] ,0表示命令没有错误输出,其他表示命令存在错误输出。
这个值可以使用exit n 进行修改i。例如 exit 88