目录

1、博客介绍

2、内容

 变量

-- 定义变量

-- 定义数组 (数组只支持一维数组)

-- 获取执行脚本时的参数

运算符 

-- 算数运算符

-- 关系运算符

-- 布尔运算符

-- 逻辑运算符

-- 字符串运算符

-- 文件测试运算符

 输出语句

 test命令

 流程控制

-- if 语句

-- for循环

-- while语句

-- until循环

-- case ... esac 

-- break命令(跳出循环)

-- continue命令 

函数 

3、推送

4、结语


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处理图片的流程

https://blog.csdn.net/Mr_Sun88/article/details/118557309


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所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处并置顶!!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐