变量
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问,访问的值是可变的
- 不能以数字开头(标准规范为大写)
- 变量值默认类型为字符串型,具体使用需要进行转换
- 变量左右不能有空格(为了好看)
- 有空格需要使用双引号
- 变量多次赋值,最后一次为准
变量的分类
-
用户自定义变量:名称:自定义 作用:自定义 内容:自定义
-
环境变量:用于系统环境相关的数据
- 用户自定义环境变量:名称:自定义 作用:自定义 内容:自定义
- 系统自带环境变量:名称:确定 作用:确定 内容:自定义
-
位置参数变量:用于脚本传递参数
- 名称:确定 作用:确定 内容:自定义
-
预定义变量:bash已经定义好的变量
- 名称:确定 作用:确定 内容:自定义
用户自定义变量
name=test
#创建自定义变量
name=test1
#修改也就是覆盖变量值
$name
#变量调用
unset name
#删除变量
set -u
#查看未定义过变量名,值为空,而如果定义为空,这样就无法区分,使用set -u可以区分,变量不存在就报错
环境变量
环境变量在父shell和子shell中都是生效的,而用户自定义只在当前shell下
用户自定义环境变量
export name=test
#就是基于用户自定义加了export
#set 查看所有变量
#env 查看环境变量
系统自带环境变量
env
LANG=en_US.UTF-8 #语言
HISTCONTROL=ignoredups
HOSTNAME=host138 #主机名
OLDPWD=/bin
XDG_SESSION_ID=3
USER=root #用户名
PWD=/root
HOME=/root
SSH_CLIENT=192.168.26.1 63647 22
SSH_TTY=/dev/pts/0
MAIL=/var/spool/mail/root
SHELL=/bin/bash #shell类型
TERM=x term
SHLVL=2
LOGNAME=root
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus
XDG_RUNTIME_DIR=/run/user/0
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#系统命令查找路径
HISTSIZE=1000 #历史命令记录数
LESSOPEN=||/usr/bin/lesspipe.sh %s
_=/usr/bin/env
#系统自带环境变量都是会影响到系统正常运行
PS1环境变量(命令提示符)
vi /etc/bashrc
#永久修改PS1环境变量
语系变量
[root@host138 ~]# echo $LANG
en_US.UTF-8
#保存的是当前的操作语系
[root@host138 ~]# locale -a | wc -l
865
#查看系统支持的语言
[root@host138 ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
#查看系统已经安装的语言
位置参数变量
- $n:n为数字,0代表本身,$1- 9 代 表 第 一 个 到 第 九 个 参 数 , 10 以 上 的 参 数 用 9代表第一个到第九个参数,10以上的参数用 9代表第一个到第九个参数,10以上的参数用{10}(常用)
- ∗ : 代 表 命 令 中 的 所 有 参 数 , *:代表命令中的所有参数, ∗:代表命令中的所有参数,*所有参数看成一个整体
- $@:代表命令中的所有参数,每个参数区分对待,属于单个**(常用)**
- $#:统计参数的个数
#!bin/bash
a=$1
b=$2
echo $a
echo $b
[root@host138 ~]# bash test.sh 1 2
1
2
#传递2个参数给脚本,这种方式往往只适合写脚本的本人使用,因为别人不知道需要输入几个参数,以及各式是什么
#!bin/bash
echo $*
echo $*
echo $#
[root@host138 ~]# bash test.sh 1 2 3 4 5
1 2 3 4 5 #代表是一个整体
1 2 3 4 5 #每个数值都是单个整体
5 #参数个数
#但是缺陷就是其他用户无法知道需要输入什么类型的值
预定义变量
- $? 最后一次运行命令的返回值,0代表正确,其他数值就是不正确
- $$ 当前的进程的进程号
- $! 后台运行的最后一个进程号
read接收键盘输出
位置参数变量存在很多对其他用户的缺陷,不是编写人员对于参数的个数和类型无法判断,而read加入了交互方式输入,对于用户就可以根据提示输入即可
- -p 等待输入的提示信息,可以写明要求输出什么信息
- -t 用户输入等待秒数
- -n 输入一个字符,自动回车确定
- -s 隐藏输入的内容,适合输入密码之类的安全信息
#!bin/bash
read -t 30 -p "Please enter whole number:" num1
read -t 30 -p "Please enter password :" -s num2
echo -e "\n$num1"
echo $num2
结果
[root@host138 ~]# bash test.sh
Please enter whole number:11111
Please enter password :
11111
22222
运算符
declare声明变量类型
- - 设置变量类型
- + 去除变量类型
- -i 声明为整数型
- -r 声明只读,并不能修改和取消
- -x 声明为环境变量
- -p 显示声明变量的类型
- -a 声明为数组型(也就是列表的意思)
但是还有很对类型不支持,日期型,布偶型、浮点型等等
declare存在很难用缺点。不推荐使用
$((运算))
默认变量都是字符型,无法进行运算
通过$((运算)) 进行运算,推荐使用
运算优先级(越大优先级越高)
也是不推荐使用,调整优先级可以直接通过小括号()
环境变量配置文件
source 配置文件
家目录下环境变量配置文件(当前shell生效)
- .bash_profile
- .bashrc
etc目录下的环境变量配置文件(全部shell生效)
- /etc/profile.d/*.sh
- /etc/profile
- /etc/bashrc
配置文件调用过程
用户登入后加载的环境变量过程
非登入情况,su 或者 子shell
退出生效的环境变量文件
- .bash_logout
默认为空,可以根据需求配置功能
系统需要执行logout 才生效