shell变量
什么是变量
·以固定名称存放 可能会变化的值
-提高脚本对任务需求 运行环境变化的适应能力
-方便在脚本中重复使用
定义/赋值/查看变量
·定义/赋值变量
-变量名=变量值
[root@svr5~]# x=12 //定义变量x 赋值12
[root@svr5~]#var1=centos //定义变量 赋值centos
查看变量
-应用变量值:$变量名
-查看变量值:echo $变量名 ,echo ${变量名}
取消变量
·变量失效
-退出定义变量shell环境时 变量会自动失效
-也可以手动取消:unset 变量名 .. ..
变量的种类
Shell变量的分类角度
·存储类型
-整数型 浮点型 双精度浮点型 字符型.. ..
-shell脚本语言对存储类型的要求比较松散
使用类型
环境变量
·配置文件
-/etc/profile , ~/.bash_profile
·相关操作
使用环境变量
1)查看环境变量相关文件
全局文件为/etc/profile,对所有用户有效;
用户文件为~/.bash_profile,仅对指定的用户有效。
查看/etc/profile文件内容:
- [root@svr5 ~]# cat /etc/profile
- .. ..
- HOSTNAME=`/bin/hostname`
- HISTSIZE=1000
- .. ..
- export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
- .. ..
使用环境变量
当前用户的环境变量USER记录了用户名、HOME记录了宿主目录
SHELL记录了登录Shell、HOSTNAME记录主机名、UID是用户的id号:
-env:列出所有的环境变量
-set:列出所有的变量
- [root@svr5 src]# env
- HOSTNAME=svr5.tarena.com
- SHELL=/bin/bash
- HISTSIZE=1000
- SSH_CLIENT=192.168.4.110 59026 22
- OLDPWD=/root
- SSH_TTY=/dev/pts/0
- USER=root
- .. ..
使用set可查看所有变量(包括env能看到的环境变量):
copytextpop-up
- [root@svr5 src]# set
- BASH=/bin/bash
- BASH_ARGC=()
- BASH_ARGV=()
- BASH_LINENO=()
- .. ..
预定义变量
·用来保存脚本程序的执行信息
-直接使用这些变量
-不能直接为致谢变量赋值
位置变量
在执行脚本时提供的命令行参数
-表示为 $n , n为序号
-$1,$2,$3 .. .. ${10},${11} .. ..
使用位置变量与预定义变量
1)创建一个测试脚本,用来展示。
copytextpop-up
- [root@svr5 ~]# vim location.sh
- #!/bin/bash
- echo $0 //脚本的名称
- echo $1 //第一个参数
- echo $2 //第二个参数
- echo $* //所有参数
- echo $# //所有的综合
- echo $$ //当前进程的进程号
- echo $? //上一个程序的返回状态码
- [root@svr5 ~]# chmod +x location.sh //添加可执行权限
read标准输入取值
·read从键盘读入变量值完成赋值
-格式:read [-p”提示信息”] 变量名
– -p可选 -t可指定超时秒数
·终端显示控制
-stty -echo: 关闭终端输出(无显示)
-stty echo: 恢复终端输出(显示)
变量的作用范围
·局部变量
-新定义的变量默认只在当前shell环境中有效
-无法在子shell环境中使用
·全局变量
-全局变量在当前shell及子shell及子shell环境中均有效
-使用export可将局部变量声明为全局变量
语法:export 局部变量名=局部变量值 .. .. :为局部变量添加全局属性
Export -n 全局变量名 .. .. :取消指定变量的全局属性
数值运算
基本运算类别
四则运算
加法: num1 + num2
加法: num1 + num2
乘法: num1 * num2
整除: num1 / num2
取余数运算
求模: num1 % num2
expr运算工具
·计算指定的表达式,并输出结果
-语法:expr 整数1 运算符 整数2 .. ..
-乘法操作应采用 \\* 转义,避免被作为shell通配符
类型 运算符 示列
加法 + expr 43 + 21, expr $X + $Y
减法 _ expr 43 – 21, expr $X – $Y
乘法 \\* expr 43 \\* 21, expr $X \\* $Y
除法 / expr 43 / 21, expr $X / $Y
取余 % expr 43 % 21, expr $X % $Y
$[]算式替换
·使用$[]或$(())
-格式:$[整数1 运算符 整数2 .. .. ]
-乘法操作*无需转义,运算符两侧可以无空格
-引用变量可以省略 $ 符号
计算结果替换表达式本身,可结合echo命令输出
[root@svr5~]# X=43
[root@svr5~]# echo $[X+21]
64
[root@svr5~]#echo $((X-21)),$((X*21))
22,903
变量的自增/减等操作
·使用$[ ]替换,或者let命令来完成
-结合echo命令查看结果
小数运算
·Bash内键机制仅支持整数值运算
-expr命令 $[ ] 算式替换 不支持有小数的运算
使用bc实现小数运算
·多数linux系统默认安装此工具
-支持高精度的数值运算
-直接运行bc可进入交互式运算界面,quit 退出
-设置 scale=n 可以约束小数位
结合管道性bc发送表达式
-多个表达式可以以分号分隔
-通过echo命令+管道传递要计算的表达式
[root@svr5~]# A=12.34
[root@svr5~]# echo “$A*56.789”| bc
700.776
[root@svr5~]#echo “scale=4;$A*56.789;5/3”| bc
700.7762
1.6666
小数值的比较
·基本用法
-echo “数值1 比较符 数值2” | bc
-如果表达式成立,则返回的计算结果位1,否则返回0
-常见比较操作:> >= < <= == !=
[root@svr5~]# A=12.34; B=56.78
[root@svr5~]# echo “$A <= $B” | bc //A是否小于或等于B
1
[root@svr5~]# echo “$A > $B” | bc //A是否大于或等于B
0
在变量中报错中: command 农田found
分析原因
Shell中的变量名
-变量名称不可以使用数字开头
-变量名不可以位特殊字符
-变量名可以为字母 数字 下划线
变量的调用
·故障错误信息
[root@svr5~]# test=12
[root@svr5~]# echo test
Test
[root@svr5~]# echo $testyuan
原因分析
·分析故障
-调用变量未获得预期的值
·分析故障原因’
-调用变量时需要使用$变量名
-调用变量时,为了防止歧义需要使用{}
Read 命令故障错误信息
[root@svr5~]# Read -p “please input pass:”pass
Please input pass:pass
[root@svr5~]# echo $pass
[root@svr5~]#
原因分析
·分析故障
-read提示符和变量之间缺少空格
-导致读取变量内容为空
分析故障原因
-因为没有空格,read将提示符和变量识别为一个整体
算术运算问题现象
·故障错误信息
[root@svr5~]# expr 1+2
1+2
[root@svr5~]# ecpr 10*5
Expr:syntax error
[root@svr5~]# echo $[3.14*2 ]
3.14*2:syntax error:invalid arithmetic operatot(error token is “.14*2”)
原因分析
·分析故障
-报错信息:无正确运算结果
-报错信息:syntax error
-报错信息::invalid arithmetic operator
·分析故障原因
-使用expr运算时,运算符号两边需要有空格
-expr进行乘法运算时,需要使用你\\屏蔽*
-expr无法进行小数运算
Shell 流程控制(循环结构)
Shell脚本的智能化
·使shell脚本获得识别能力
·为命令的执行提供最直接的识别依据
-文件或目录的读/写等状态
-数值的大小
-字符串是否匹配
-多条件组合
Test测试操作
·语法格式
-test 选项 参数
-[ 选项 参数]
Help test 查阅帮助
常见的测试操作
字符串的比较
·[ 操作符 字符串 ]
操作符 含义
-z 字符串的值为空
-n 字符串的值不为空(相等于!-z)
·[ 字符串1 操作符 字符串2 ]
操作符 含义
== 两个字符串相同
!= 两个字符串不相同
数值的比较
·[ 整数值1 操作符 整数值2 ]
操作符 含义
-eq 等于(Equal)
-ne 不等于(not Equal)
-ge 大于等于
-gt 大于
-le 小于等于
-lt 小于
文件的状态测试
·[ 操作符 文件或目录]
组合多个条件
逻辑分割操作
·主要用法
-命令1 操作符 命令2
-[ 条件1 ] 操作符 [ 条件2 ]
但分支结构
语法格式及特点
·当“条件成立”时执行命令序列
·否则,不执行任何操作
双分支结构
语法格式及特点
·当“条件成立”时执行命令序列1
·否则,执行命令序列2
多分枝结构
语法格式及特点
·相当于if语句嵌套
·针对多个条件分别执行不同的操作
循环结构
for循环
语法结构及特点
·遍历/列表是循环
-根据变量的不同取值,重复执行命令序列
While循环
语法结构及特点
·条件是循环
-反复测试条件,只要成立就执行命令序列
Case语句分支结构
Case语法结构及特点
·检查变量的实际取值
-如果与预设的值相匹配,则执行对应的操作
函数及终端控制
关于函数的认识
·什么是函数
-在shell环境中,将一些需要重复使用的操作,定位公共的语句块,即可成为函数
·使用函数的好处
-使用脚本代码更简洁,增强易读性
-提高shell脚本的执行效率