shell: 测试环境在linux上搭建
可以使用shell脚本进行自动化部署测试环境
1. shell介绍: 是一段应用程序,是用户和linux操作系统交互的桥梁
弱类型语言,定义变量时,不需要指定变量的类型
2. shell规范: shell脚本文件是以.sh进行结尾
.sh文件的第一行内容为 #!/bin/bash ----表示使用shell进行编程
注释: #
3. 变量:
定义变量格式:
变量名=变量值 等于号的两边不能存在空格
变量值中也不能存在空格
由字母 数字 下划线组成, 不能以数字开头
例如 name=xiaoming
输出变量内容 echo $变量名
4. 释放变量的值 unset 变量名称
5. 特殊的变量定义,带空格的变量定义 :加双引号或者单引号
name="zhang san"
name2='zhang san'
双引号和单引号的区别:
1. 双引号: 如果变量值中存在 $变量名的话, 输出结果将会是变量名对应的变量值 , 如果想原样输出内容在$前面加转义字符\
2. 单引号: 如果变量值中存在$变量名, 那么将原样输出, 单引号里面是什么就输出什么
3. 反单引号(Esc下面的键, 英文状态下):
可以执行命令, n=`ls`
单引号内可以存放命令
案例1:
编写shell脚本, 使用shell脚本, 输出当前所在的目录
步骤: 第一步 创建.sh文件
第二步 编写脚本
第三步 执行(两种方式)
cd / # 进到根目录
mkdir shell_data/L1 # 创建文件夹 shell_data里面还有一个文件夹L1
cd shell_data/L1 # 进到L1目录下
vim script1.sh 用i输入数据 # 创建文件输入脚本
第一行: #!/bin/bash
第二行 dir=`pwd`
第三行 echo $dir
执行文件:
1) ./文件名.sh
script.sh 这个问题是权限问题一会解决
2) sh 文件名.sh
sh script1.sh # 执行文件
结果: 输出文件路径
/shell_data/L1 # 执行文件后,输出结果
注意:
更改文件权限:
chmod +x script1.sh # 给script1.sh一个x权限 (参考Linux第四篇权限问题)
执行文件
案例2:
计算/etc目录下有多少个文件, 用shell脚本实现
ls -l 查看所有的文件
ls -l | wc -l 统计所有的文件个数
步骤: 第一步 创建.sh文件
第二步 编写脚本
第三步 执行(两种方式) 可根据第一个案例更改权限
结果 :
在etc目录下共有234个文件
案例3:
read用法: 键盘录入
变量名可以有一个或者多个, 变量名之间用空格隔开, 值也用空格隔开
(1) read 变量名
read a 回车后此时需要输入一个值 ,赋值给a这个变量
(2) read 变量1 变量2 变量3 ... 给多个变量赋值 变量之间用空格分开
read a b c
zhangsan lisi wangwu 键盘录入的值 也要用空格隔开
(3) 特殊情况
如果变量值 多于 变量名称, 会把 最后剩余的值 赋值给 最后一个变量
(4) read 添加提示信息
read -p "提示的内容" 变量名
实现统计任何指定目录下的文件个数 通过从键盘输入目录自动计算
第一步, 写.sh 文件
第二步执行文件,输入目录
案例4 不使用read 直接输入命令的时候就把目录传进去
参数传递: 向 .sh文件传送数据
格式: 命令 文件名 参数
sh script4.sh /etc 向script传递了 /etc 这个数据
文件中接收参数的方式:
$1表示接收第一个参数
$2表示接收第二个参数
$n表示第n个参数
(1). 一个参数的情况 文件中接收参数的方式 $1接收第一个参数
(2.) 多个参数的情况
1). 当有多个接收值,来接收传递的数据时, 第一个接收第一个数据,一 一对应着接收, 没有对应上就空着
2). 如果是多着传递的数据的话, 就不接收多余的
3). 如果接收是$1 $2 $4的话 就不接收第三个数据, 跳着的就跳过去,一定是一 一对应的
4). 脚本中接收数据是 $0 则显示的是本文件的名称
如果是 $@ 显示的是所有的参数
如果是 $# 显示的是参数的个数
![]()
重定向:
把文件中的命令内容输出到文件中去,
一种是正确的命令下重定向
覆盖重定向: 命令 1>文件名 如 ls 1>a.txt
追加重定向: 命令 1>>文件名 如 ls /etc 1>>a.txt
一种是错误的命令下重定向
覆盖 2> 错误的信息也会重定向到文件中 如 lss 2>a.txt
追加 2>> 错误的信息也会追加重定向到文件中 lls2>>a.txt