变量
作用:
1、数据存储方式
2、参与的运算
3、表示的数据范围
**类型:**字符
**数值:**整型、浮点型(shell不支持小数)
1.shell中变量命名法则:
1、不能使程序中的保留字:例如if, for
2、只能使用数字、字母及下划线,且不能以数字开头
3、见名知义
4、统一命名规则:驼峰命名法
StudentName
下划线 student_name
2.Shell中命名建议规则:
1、变量名大写
2、局部变量小写
3、函数名小写
4、用英文名字,并体现出实际作用
bash中变量的种类
根据变量的生效范围等标准划分下面变量类型
局部变量生效范围为当前shell进程;对当前shell之外的其它shell进程,
包括当前shell的子shell进程均无效
环境变量:生效范围为当前shell进程及其子进程
本地变量:生效范围为当前shell进程中某代码片断,通常指函数
位置变量:$1, $2, …来表示,用于让脚本在脚本代码中调用通过命令行传
递给它的参数
特殊变量:$?, $0, $*, $@, $#,$$
declare用法***
declare -x 声明环境变量export
declare -r 声明只读变量readonly
declare -i 声明整数int
set用法
参考
set 变量 值
直接赋值
set ip 192.168.8.100
-u
当没有有变量不存在----报错—不会执行(建议使用)
等同set –o nounset
-e
如果一个命令错误就会直接退出
等同set –o errexit
3.局部变量(无继承)
变量赋值:name=‘value’
可以使用引用value
(1) 可以是直接字串:name=“root"
(2) 变量引用:name="$USER"
(3) 命令引用:
name=`COMMAND` 或 name=$(COMMAND)
变量引用:${name} 或者 $name
" " 弱引用,其中的变量引用会被替换为变量值
’ ’ 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
显示已定义的所有变量:set
删除变量:unset name
打印变量用 echo $变量名称
给变量后面加内容 用”” 或{}括起来
把一个变量的值给另一个变量----------一定要加$
把命令设置成变量,这样执行变量就相当于执行这个命令
无继承性
4.环境变量(有继承性)
如果在子进程中修改环境变量----父进程的不会改变(但他的子进程会继承)
变量声明、赋值:
export name=VALUE
declare -x name=VALUE
变量引用:
$name, ${name}
显示所有环境变量:
env
printenv
export
declare -x
删除变量:
unset name
bash内建的环境变量
BASHPID 查看当前进程编号
PPID 产看父进程编号
PATH 当前path路径
SHELL 当前shell类型 显示系统内所有的shell--># cat /etc/shell
USER 当前用户
UID 当前用户的uid
HOME 当前用户家目录
PWD 当前路径
SHLVL 当前shell的嵌套深度
LANG 语言
MAIL 当前用户邮箱
HOSTNAME 主机hostname
HISTSIZE 历史记录长度
_ 下划线 上调命令最后一个参数
特殊的
PS1
命令提示符
PS2
是cat的多行重定向提示符
PS3
是select菜单的提示符
这里的NAME已经是环境变量—所以不用加export
5. 只读变量
只能声明,但不能修改和删除
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly -p
例如:
pi=3.1416
readonly pi
6.位置变量
在脚本代码中调用通过命令行传递给脚本的参数
$1, $2, ... 对应第1、第2等参数,shift [n]换位置
$0 命令本身
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
$# 传递给脚本的参数的个数
注意:$@ $* 只在被双引号包起来的时候才会有差异
set -- 清空所有位置变量
7. 退出状态
进程使用退出状态来报告成功或失败
0 代表成功,1-255代表失败
$? 变量保存最近的命令退出状态
grep -q静默模式------用这个就可以查看 $?查看上一条执行命令接结果
例如:
ping -c1 -W1 hostdown &> /dev/null
echo $?