文章目录
变量设置规则
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
- 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。
- 变量用等号连接值,等号左右两侧不能有空格。
- 变量的值如果有空格,需要使用单引号或
双引号包括。 - 在变量的值中,可以使用“\”转义符。
- 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含" 变 量 名 " 或 用 变量名"或用 变量名"或用{变量名}包含。
- 如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令。
- 环境变量名建议大写,便于区分。
变量分类
- 用户自定义变量,又叫做本地变量
- 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
- 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
四类变量从上往下依次自由度越来越小,优先级越来越低
本地变量
- 变量定义:
[root@localhost ~]# name=lhx
[root@localhost ~]# name="lu hong xuan"
- 变量叠加
[root@localhost ~]# aa=123
[root@localhost ~]# aa="$aa"456
[root@localhost ~]# aa=${aa}789
- 变量调用
[root@localhost ~]# echo $name
- 变量查看
# 查看所有变量
[root@localhost ~]# set
- 变量删除
[root@localhost ~]# unset name
环境变量
- 变量定义
# 临时定义
[root@localhost ~]# export name=lhx
[root@localhost ~]# age=19
[root@localhost ~]# export age
# 永久定义
- 环境变量查看
[root@localhost ~]# env
- 环境变量删除
[root@localhost ~]# unset name
系统常见环境变量介绍
-
PATH:系统查找命令的路径(中间用:隔开,通过变量叠加的方式实现)
-
PS1:定义系统提示符的变量
修改系统提示符,建议使用默认。
参数 | 描述 |
---|---|
\d: | 显示日期,格式为“星期 月 日” |
\h: | 显示简写主机名。如默认主机名“localhost” |
\t: | 显示24小时制时间,格式为“HH:MM:SS” |
\T: | 显示12小时制时间,格式为“HH:MM:SS” |
\A: | 显示24小时制时间,格式为“HH:MM” |
\u: | 显示当前用户名 |
\w: | 显示当前所在目录的完整名称 |
\W: | 显示当前所在目录的最后一个目录 |
#: | 执行的第几个命令 |
$: | 提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$ |
示例:
[root@localhost ~]# PS1='[\u@\t \w]\$ '
[root@04:50:08 /usr/local/src]#PS1='[\u@\@ \h \# \W]\$‘
[root@04:53 上午 localhost 31 src]#PS1='[\u@\h \W]\$
环境变量配置文件及其作用
/etc/profile的作用:
- USER变量:
- LOGNAME变量:
- MAIL变量:
- PATH变量:
- HOSTNAME变量:
- HISTSIZE变量:
- umask:
- 调用/etc/profile.d/*.sh文件
~/.bash_profile的作用
- 调用了~/.bashrc文件。
- 在PATH变量后面加入了“:$HOME/bin”这个目录
~/.bashrc的作用
- 定义默认别名
- 调用/etc/bashrc
/etc/bashrc的作用(大部分针对nologin用户)
- PS1变量
- umask
- PATH变量
- 调用/etc/profile.d/*.sh文件
其他配置文件
- 注销时生效的环境变量配置文件: ~/.bash_logout
- history配置文件:~/bash_history
- shell本地终端欢迎信息: /etc/issue
转义符 | 作 用 |
---|---|
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\l | 显示登录的终端号,这个比较常用。 |
\m | 显示硬件体系结构,如i386、i686等 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登录用户的序列号 |
- 远程终端欢迎信息:/etc/issue.net
- 转义符在/etc/issue.net文件中不能使用
- 是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(记得重启SSH服务)
- 登陆后欢迎信息(本地和远程):/etc/motd
位置参数变量
位置参数变量 | 作 用 |
---|---|
$n | n为数字,$0代表命令本身,**$1- 9 代 表 第 一 到 第 九 个 参 数 ∗ ∗ , 十 以 上 的 参 数 需 要 用 大 括 号 包 含 , 如 9代表第一到第九个参数**,十以上的参数需要用大括号包含,如 9代表第一到第九个参数∗∗,十以上的参数需要用大括号包含,如{1} |
$* | 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
预定义变量
预定义变量 | 作 用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
变量运算
方式一(不推荐):declare声明变量类型
shell中变量默认字符串类型,设置为数值类型,即可进行运算。
declare 语法
declare [+/-][选项] 变量名
选项:
- -: 给变量设定类型属性
- +: 取消变量的类型属性
- -i: 将变量声明为整数型(integer)
- -x: 将变量声明为环境变量
- -p: 显示指定变量的被声明的类型
范例
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
#给变量aa和bb赋值
[root@localhost ~]# declare -i cc=$aa+$bb
方式二(不推荐):expr或let数值运算工具
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
#给变量aa和变量bb赋值
[root@localhost ~]# dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两
侧必须有空格
方式三(推荐):“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))”或“ ((运算式))”或“[运算式]”
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# ff=$(( $aa+$bb ))
[root@localhost ~]# gg=$[ $aa+$bb ]
变量测试与内容替换(了解)
规则及其复杂和反人类,如果发现shell脚本中用到了,来查表即可。