1、shell最上面的一行
#!/bin/sh
指的shell的编译器,其中最常见的就是这种,还有几种其他的编译器
2、shell文件在Windows下面编辑好了之后直接复制到Linux下面是不能执行的,报错syntax error:unexpected end of file.,原因是dos和Linux之间的文件格式的差异,所以必须把文件设置成Linux能够识别的格式才能够在Linux中执行,具体方法如下,使用vi命令打开文件,设置文件的编码格式,保存,退出,就可以了
vi test.sh
:set fileformat=unix
:wq
3、shell中if then之后通常会接上一个fi,如下,其中fi并没有什么实际的意义,是由于shell不同于Java,没有括号{}能够表示语句块的结束,因此加上fi表示if这个语句块结束了,如果不使用fi,程序就会认为then后面的代码都是属于这个语句块里面的。if后面的-d是判断目录是否存在,本段代码的含义是,如果目录不存在则创建目录
#!/bin/sh
jmapdir=$HOME/jmaplogs
if [ ! -d $jmapdir ]
then
mkdir $HOME/jmaplogs
fi
4、通过一个例子说明if条件判断的用法,其中-eq是判断数值是否相等,如果相等则为真,执行then的内容,如果要判断字符串是否相等,可以用“=”;
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真
#!/bin/sh
if [ $1 -eq $2 ]
then
echo "a is equal to b"
else
echo "a is not equal to b"
fi
5、shell的参数传递,其中几个特殊的参数及含义如下
#!/bin/bash
echo "文件名为$0!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
~
执行命令如下
sh 12.sh 1 1 1
结果如下
文件名为12.sh!
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 1 1
6、while do的用法,下面这段的意思是判断$PRG文件是否存在并且是一个符号链接,如果是的话就执行do里面的内容
PRG="$0"
while [ -h "$PRG" ]; do
....
done
7、if else-if else 语法格式:
#!/bin/sh
a=10
b=20
if [ $1 == $2 ]
then
echo "$1 等于 $2"
elif [ $1 -gt $2 ]
then
echo "$1 大于 $2"
elif [ $1 -lt $2 ]
then
echo "$1 小于 $2"
else
echo "没有符合的条件"
fi
8、获取当前shell的pid的方法
echo "PID of this script: $$"
9、在shell中调用另一个shell(子shell),并引用子shell的变量,可使用source命令
子和父的内容,其中A就是子传给父的参数
执行命令和结果
10、shell并行执行两条命令的方法,举例如下:
for ((i=1;i<=1;i++));do
{
sleep 10
echo first;
} &
done
echo third;
更高级一点的并发如下,休眠5s后打印"*****执行1号测试计划******",10s后打印第二条,依次打印即30s后执行第六条,40s后打印构建完成"*****构建完成******"
for i in {1..6};do
{
sleep $[$i*5]
echo "*****执行$i号测试计划******"
} &
done
sleep 40
echo "*****构建完成******"
11、shell中参数引用的时候,里面还有一个参数的写法如下,循环时,i为1时,其中$i是一个参数,值为1,`eval echo '$'Case${i}`为另外一个参数case1,值为Coverage
Case1=Coverage
Case2=DownGradeAllowFail1
Case3=DownGradeAllowFail2
for i in {1..9};do
{
sleep $[$i*90]
echo "*****执行$i号测试计划******"
sh apache-jmeter-3.1/bin/jmeter -n -t JmxCase/`eval echo '$'Case${i}`.jmx -l result/`eval echo '$'Case${i}`.jtl
} &
done
sleep 800
echo "*****构建完成******"