课程目标
        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,则可以省略