课程目标
1.熟悉Linux命令
2.可以使用shell脚本自动化部署测试环境
shell介绍
shell是一段应用程序,是用户和操作系统交互的一个桥梁,shell通常就是shell脚本
shell弱类型语言,在定义变量不需要指定变量的类型
shell脚本规范
1.shell脚本是以.sh结尾的文件
2..sh文件的第一行内容为#!/bin/bash---->表示使用shell进行编程
3.shell中的注释:#
shell语法
变量
变量名=变量值
等于号两边没有空格
变量命名规范
不能以数字开头,字母、数字、下划线组成
输出变量内容echo $变量名
变量的释放
unset 变量名
特殊的变量,带有空格的变量定义
双引号""
如果变量值中存在$变量名的话,那么输出结果将会是变量名对应的变量值
如果想原样输出内容,可以在$变量名前面加转义字符\
单引号:''
如果变量值中存在$变量名,那么将原样输出
反单引号``
存放的是命令
练习:1. 练习:使用shell脚本,输出当前所在的目录
步骤
1.新建.sh文件
2.在文件中编写shell脚本
3.执行
方式1:sh 文件名.sh
方式2
1.添加x权限:chmod +x 文件名.sh
2. 执行 ./文件名.sh
练习2. :计算/etc目录下有多少个文件,用shell脚本实现
改进:实现统计任何指定目录下的文件个数
通过从键盘输入
read的用法
read 变量名
1.变量名可以有一个或者多个,变量名用空格隔开,变量值用空格隔开
2.如果变量值多于变量名,那么将会把多余的变量值赋值给最后一个变量
3.可以添加提示信息:read -p "提示的内容" 变量名
参数传递
向.sh文件中传递数据
格式
命令 文件名 参数
如:sh script4.sh /etc
文件中接收参数的方式
$1--->表示第一个参数
$2---》表示第二个参数
$3---》第三个参数
$n--->表示第n个参数
$0--->代表文件名
$@:显示全部参数
$#:显示参数的个数
重定向
把命令的内容输出到文件中
正确的命令
1表示
覆盖
命令 1>文件名
如:ls 1>a.txt
追加
命令 1>>文件名
如:ls /tmp 1>>a.txt
错误的命令
2表示
覆盖
命令2>文件名
如:ls 2>a.txt
追加
命令 2>>文件名
如:ls /tmp 2>>a.txt
程序结构
分支结构
if...else分支
格式
if [ 条件 ]
then
语句
else
语句
fi
注意
1.条件两边要有空格
2.多个条件间要有空格
3.if后面要有空格
4.条件中如果存在变量,那么变量的两边要有双引号
如:name="chenliang"---->echo $name, N="chenliang"
if [ 条件 ];then
语句
else
语句
fi
练习
练习:判断 /root目录是否为空
ls /root
知识点:字符串的比较:==判断是否相等,!=判断是否不相等
练习:通过用户输入任意目录判断是否为空
判断用户输入的用户名和密码是否为admin 123456,如果是则提示登录成功,否则提示失败
知识点
逻辑运算符
且:-a
或者: -o
非: !
练习:输入数字,判断是否大于0,如果大于0则将该数字-1并输出,否则+1输出
知识点:数字间比较--->比较运算符
-eq ---》判断是否相等
-ne--->判断是否不相等
-gt---->判断是否大于
-ge --->判断是否大于等于
-lt ----->判断是否小于
-le ---->判断是否小于等于
数字变量操作
((i++)) ((i+=1)) i=$[$i+1] let i=i+1 i=$(($i+1))
练习:判断用户输入的目录是否存在,如果存在则统计目录下的文件个数,否则提示用户该目录不存在
涉及知识点:测试文件的状态test 参数 变量名
参数
-e表示文件是否存在
-f 表示文件是否存在且为文件
-d 表示文件名是否存在且为目录
-r 可读
-w 可写
-x 可执行
if...elif...else分支
格式
if [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
elif [ 条件 ]
then
语句
....
else
语句
fi
练习
练习:判断学生的成绩,范围在90-100提示优秀,80-90之间提示良好,70-80之间则提示一般,60-70之间提示及格。其他则提示不及格
练习:判断用户输入的内容是否为空,为空则提示,不为空则判断是否为目录,不为目录则判断是否为文件,否则提示错误信息
涉及知识点
文件判断
-r -r filename 文件是否存在且可读
-w -w filename 文件是否存在且可写
-x -x filename文件是否存在且可执行
-f -f filename 文件是否存在且是普通文件
-d -d filename 文件是否存在且是一个目录
-e -e filename 文件是否存在
-n -n str1 字符串长度是否不等于0
-z -z str2 字符串长度是否等于0
case分支
格式
case $变量名 in
"值")
语句;;
"值")
语句;;
"值")
语句;;
.....
*)
语句;;
esac
注意
1.case这一行最后必须为in
2. ;;---->结束语句
3. *---->默认
4.esac--->case语句的结束
5.值可以是字符串也可以是数字
6.“值”还可以是区间范围,范围[0-9]
练习
练习:输入一个字母,判断该用户选择哪款产品,A:笔记本 B:电饭煲 C:小台灯
练习:请输入对客服的满意度,【0-3】不满意,【4-6】满意,【7-9】非常满意
循环结构
for循环
格式
for 变量名 in 列表
do
语句
done
练习
输出1-10之间的数
改进版
seq start size max
start:开始点
size:间隔
max:结束点
注意:如果size的值为1,则可以省略