jenkins自动化构建流程篇章三 :shell脚本的语法和调用
2
·
目录
1、博客介绍
本篇是jenkins自动化流程的第三篇,shell脚本的语法,本篇会简单介绍一下shell的一些简单用法,大部分都是摘自菜鸟教程,本篇做记录用,有兴趣的同学可以直接跳转菜鸟教程
传送门:https://www.runoob.com/linux/linux-shell.html
篇章一 :在linux上部署jenkins环境
https://blog.csdn.net/Mr_Sun88/article/details/118557269
篇章二 :jenkins任务的创建
https://blog.csdn.net/Mr_Sun88/article/details/118557289
篇章三 :shell脚本的语法和调用
https://blog.csdn.net/Mr_Sun88/article/details/118557330
篇章四 :实战,利用jenkins构建一个python处理图片的流程
2、内容
我们在上一篇的任务创建中已经介绍了,shell是怎么被调用的,这里我们简单在介绍一下shell的一些语法。
变量
-- 定义变量
test_str="111" (echo 为输入语句)
输出1:echo test_str --结果 test_str
输出2:echo $test_str --结果 111
输出3:echo ${test_str} -- 结果 111
readonly test_str -- readonly 可以将变量变成只读变量 不能被修改
unset test_str -- unset 删除变量 删除后不能被使用 不能删除只读变量
注:变量的声明,等号前后不能有空格
-- 定义数组 (数组只支持一维数组)
# list=(12 234 3 4 5) # 数组 创建 括弧()
# list[6]=7 # 数组的手动赋值
# echo ${list[5]} # 数组的调用 必须加{}
# echo ${list[@]} # 可以使用@获取数组中所有元素
# echo ${#list[@]} # 获取数组长度
# echo ${#list[*]} # 获取数组长度
# echo ${#list[n]} # 获取数组长度
-- 获取执行脚本时的参数
# 可以在执行shell脚本的时候 为其传参数 sh test.sh 1 2 3
# echo "Shell 传递参数实例!";
# echo "执行的文件名:$0"; # 输出执行文件的名字 $0
# echo "第一个参数为:$1"; # 输出第一个参数 $1
# echo "第二个参数为:$2"; # 输出第二个参数 $2
# echo "第三个参数为:$3"; # 输出第三个参数 $3
# echo "$#"; # 输出总参数的个数 $#
$# | 传递到脚本的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数。 如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
运算符
-- 算数运算符
#!/bin/bash
val=`expr 2 + 2`
echo "两数之和为 : $val"
# 输出结果:两数之和为 : 4
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | `expr $a + $b` 结果为 30。 |
- | 减法 | `expr $a - $b` 结果为 -10。 |
* | 乘法 | `expr $a \* $b` 结果为 200。 |
/ | 除法 | `expr $b / $a` 结果为 2。 |
% | 取余 | `expr $b % $a` 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
-- 关系运算符
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
输出结果:10 -eq 20: a 不等于 b
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
-- 布尔运算符
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
输出结果:10 != 20 : a 不等于 b
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为 true 则返回 false,否则返回 true。 | [ ! false ] 返回 true。 |
-o | 或运算,有一个表达式为 true 则返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
-- 逻辑运算符
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
输出:返回 false
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
-- 字符串运算符
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a 等于 b"
else
echo "$a = $b: a 不等于 b"
fi
输出:abc = efg: a 不等于 b
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
!= | 检测两个字符串是否不相等,不相等返回 true。 | [ $a != $b ] 返回 true。 |
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] 返回 false。 |
-n | 检测字符串长度是否不为 0,不为 0 返回 true。 | [ -n "$a" ] 返回 true。 |
$ | 检测字符串是否为空,不为空返回 true。 | [ $a ] 返回 true。 |
-- 文件测试运算符
file="/var/www/runoob/test.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
输出:文件可读
操作符 | 说明 | 举例 |
---|---|---|
-b file | 检测文件是否是块设备文件,如果是,则返回 true。 | [ -b $file ] 返回 false。 |
-c file | 检测文件是否是字符设备文件,如果是,则返回 true。 | [ -c $file ] 返回 false。 |
-d file | 检测文件是否是目录,如果是,则返回 true。 | [ -d $file ] 返回 false。 |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 | [ -f $file ] 返回 true。 |
-g file | 检测文件是否设置了 SGID 位,如果是,则返回 true。 | [ -g $file ] 返回 false。 |
-k file | 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 | [ -k $file ] 返回 false。 |
-p file | 检测文件是否是有名管道,如果是,则返回 true。 | [ -p $file ] 返回 false。 |
-u file | 检测文件是否设置了 SUID 位,如果是,则返回 true。 | [ -u $file ] 返回 false。 |
-r file | 检测文件是否可读,如果是,则返回 true。 | [ -r $file ] 返回 true。 |
-w file | 检测文件是否可写,如果是,则返回 true。 | [ -w $file ] 返回 true。 |
-x file | 检测文件是否可执行,如果是,则返回 true。 | [ -x $file ] 返回 true。 |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 检测文件(包括目录)是否存在,如果是,则返回 true。 | [ -e $file ] 返回 true。 |
输出语句
################################### echo命令
# echo "It is a test" 显示普通字符串
# echo "\"It is a test\"" 显示转义字符
# echo "$name It is a test" 显示变量
################################### printf命令
# printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
# printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
# printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
# printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876
test命令
################################### test命令
# 参数 说明
# -eq 等于则为真
# -ne 不等于则为真
# -gt 大于则为真
# -ge 大于等于则为真
# -lt 小于则为真
# -le 小于等于则为真
# num1=100
# num2=100
# if test $[num1] -eq $[num2]
# then
# echo '两个数相等!'
# else
# echo '两个数不相等!'
# fi
流程控制
-- if 语句
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
输出结果:a 小于 b
-- for循环
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
输出结果:
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
-- while语句
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
输出结果:
1
2
3
4
5
-- until循环
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done
输出结果:
0
1
2
3
4
5
6
7
8
9
-- case ... esac
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
输入 1 到 4 之间的数字:
你输入的数字为:3
你选择了 3
-- break命令(跳出循环)
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done
执行以上代码,输出结果为:
输入 1 到 5 之间的数字:3
你输入的数字为 3!
输入 1 到 5 之间的数字:7
你输入的数字不是 1 到 5 之间的! 游戏结束
-- continue命令
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字: "
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的!"
continue
echo "游戏结束"
;;
esac
done
注:与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
函数
################################### 函数
demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "输入的两个数字之和为 $? !"
unWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
3、推送
Github:https://github.com/KingSun5
后续文章传送门:
4、结语
若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。
QQ交流群:806091680(Chinar)
该群为CSDN博主Chinar所创,推荐一下!我也在群里!
本文属于原创文章,转载请著名作者出处并置顶!!!!
更多推荐
已为社区贡献2条内容
所有评论(0)