变量
1.什么是变量?
变量即可以变化的量,变量可以保存下来,后面可以引用。
2.变量名称注意事项
只能包含字母、数字、下划线,并且不能以数字开头不应该跟系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要用“_”下划线开头最好做到见名知义不能使用程序中的保留字,例如if、for等
3.变量类型
字符型数值型: 整数、浮点型布尔型:true、false(首字母大写)
4. 变量操作
设置变量引用变量撤销变量
[root@ansible ~]# a=11 //设置变量
[root@ansible ~]# b=22
[root@ansible ~]# echo $a //$引用变量,echo打印出来
11
单引号与双引号的区别
[root@ansible ~]# xiaowang=1
[root@ansible ~]# echo "$xiaowang" //双引号取出里面的数值
1
[root@ansible ~]# echo '$xiaowang' //单引号取出所有
$xiaowang
5. bash变量类型
环境变量本地变量(局部变量),只在当前主机生效。位置变量特殊变量(bash内置的,用来保存某些特殊数据的变量,也称系统变量)
5.1 本地变量
VAR_NAME=VALUE //本地变量,作用域为当前shell进程。对当前shell外的其它shell进程,包括当前shell的父shell、子shell进程均无效
local VAR_NAME=VALUE //局部变量,作用域为当前代码段,常用于函数
5.2 环境变量
export VAR_NAME=VALUE //作用域为当前shell进程及其子进程
5.3 位置变量
$1,$2,$3,.... //用来引用脚本的参数
shift [num] //位置变量使用完以后退出,后面的参数向前推进
[root@ansible ~]# cat test.sh
#!/bin/bash
[root@ansible ~]# chmod +x test.sh //给一个可读权限
echo $1 $2 $3 $4
[root@ansible ~]# ./test.sh 5 6 7 8
5 6 7 8
根据位置的变换来取值
[root@ansible ~]# cat test.sh
#!/bin/bash
echo $1 $4 $3 $2
[root@ansible ~]# ./test.sh 5 6 7 8
5 8 7 6
5.4 特殊变量
$# //是传给脚本的参数个数
$0 //是脚本本身的名字
$! //是shell最后运行的后台Process的PID
$@ //是传给脚本的所有参数的列表
$* //是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ //是脚本运行的当前进程ID号
$? //是显示上条命令的退出状态,0表示没有错误,其他表示有错误
例如:
[root@ansible ~]# cat test.sh
#!/bin/bash
echo $#
[root@ansible ~]# ./test.sh 1 2 3 4 5 6 7
7
[root@ansible ~]# cat test.sh
#!/bin/bash
echo $0
[root@ansible ~]# ./test.sh 1 2 3 4 5 6 7
./test.sh
$@可以单独取某一个
[root@ansible ~]# cat test.sh
#!/bin/bash
echo $@
[root@ansible ~]# ./test.sh 1 2 3 4 5 6 7
1 2 3 4 5 6 7
$*代表取所有的
[root@ansible ~]# cat test.sh
#!/bin/bash
echo $*
[root@ansible ~]# ./test.sh 1 2 3 4 5 6 7
1 2 3 4 5 6 7
[root@ansible ~]# cat test.sh
#!/bin/bash
echo $?
[root@ansible ~]# ./test.sh 1 2 3 4 5 6 7
0
5.5 bash内建环境变量
PATH //命令查找的位置
SHELL //当前所用shell
UID //当前用户的uid
HISTSIZE //命令历史的长度
HOME //当前用户的家目录
PWD //当前的位置
HISTFILE //当前用户的历史命令存放的位置
PS1 //定义命令提示符的样式
5.6 只读变量(常量)
readonly VAR_NAME=VALUE //不能修改值,不能销毁,只能等shell进程终止时随之消亡
[root@ansible ~]# readonly lp=nihao
[root@ansible ~]# lp=111
-bash: lp: readonly variable