-
CI:持续集成
持续不断地把每天代码集成起来,测试代码整体的可运行性
-
CD:持续交付
根据用户体验等BUG反馈,持续进行版本迭代
1. shell基础
1.1 脚本基础
shell就是在操作系统和应用程序之间的一个命令翻译工具。
- shell可用逐行输入命令、逐行进行确认执行,也可用脚本方式进行执行(常用)
- 脚本执行方式是将shell命令写入脚本文件中,然后运行脚本文件
1.2 脚本规范
windows以[.sh]文件结尾,Linux通过vi/vim,且脚本是从上到下依次执行命令
#!/bin/bash
# 这是临时shell脚本
echo 'nihao'
- 运行脚本的方式主要有相对路径和绝对路径,工作中主要用到绝对路径,即:
bash /path/to/script-name 或 /bin/bash /path/to/script-name (强烈推荐使用)
也可用其它方式
/path/to/script-name 或 ./script-name (当前路径下执行脚本)
source script-name 或 . script-name (注意“.“点号)
1.3 shell中的变量
shell中变量主要分为本地变量、全局变量、内置变量
-
本地变量又分为普通变量和命令变量
- 本地变量:
变量名="变量值"
重点:如果变量值范围内,有可以解析的变量A,那么首先解析变量A,将A的结果和其他内容组合成一个整体,重新赋值给变量B,数字不加引号,其他默认加双引号。- 命令变量:
变量名=$(命令)
执行流程:
1、执行$()范围内的命令 2、将命令执行后的结果,赋值给新的变量名A -
全局变量:
export 变量=值
可用env查看所有全局变量,也可用env | grep 变量名 查看该全局变量
-
内置变量
| 符号 | 意义 |
|---|---|
| $0 | 获取当前执行的shell脚本文件名,包括脚本路径 |
| $n | 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大 括号括起来${10} |
| $# | 获取当前shell命令行中参数的总个数 |
| $? | 获取执行上一个指令的返回值(0为成功,非0为失败) |
-
查看变量和取消变量
- 查看变量:
"${变量名}"
当外部存在双引号时 echo " dsa dsafsa dsafsa ${变量名} f "
- 取消变量: unset 变量名
1.4 字符串截取和默认值
- 字符串截取格式:${变量名:起始位置:截取长度}
示例:
${file:0:5} 从第1个字符开始,截取5个字符
${file::5} 从第1个字符开始,截取5个字符
${file:5:5} 从第6个字符开始,截取5个字符
${file:5} 从第6个字符开始,截取后面所有的字符
${file:0-5} 从倒数第5个字符开始,截取后面所有的字符
${file:0-6:3} 从倒数第6个字符开始,截取之后的3个字符
- 默认值格式:{变量名:+默认值}
#!/bin/bash
# 套餐选择演示
a="$1"
echo "您选择的套餐是: 套餐 ${a:-1}"
运行结果:a无参数就默认输出套餐1,有参数输出该套餐数
-
${变量名:-默认值}
变量a如果有内容,那么就输出a的变量值
变量a如果没有内容,那么就输出默认的内容
#!/bin/bash
# 结婚年龄选择演示
a="$1"
echo "法定结婚年龄是: ${a:+22}"
-
${变量名:+默认值}
不管a有没有值都输出默认内容
2. shell 进阶
2.1 测试语句
- test 条件表达式
- [ 条件表达式 ],中括号内两边必须有空格
2.2 逻辑表达式
-
命令1 && 命令2
如果命令1执行成功,那么我才执行命令2
如果命令1执行失败,那么命令2也不执行
-
命令1 || 命令2
如果命令1执行成功,那么命令2不执行
如果命令1执行失败,那么命令2执行
2.3 文件表达式
- -f 判断输入内容是否是一个文件
示例:
# [ -f weizhi.sh ] && echo "是一个文件"
是一个文件
# [ -f weizhi.sddh ] || echo "不是一个文件"
- -d 判断输入内容是否是一个目录
- -x 判断输入内容是否可执行
2.4 数值操作符
n1 -eq n2 相等
n1 -gt n2 大于
n1 -lt n2 小于
n1 -ne n2 不等于
- 字符串比较
str1 == str2 str1和str2字符串内容一致
str1 != str2 str1和str2字符串内容不一致,!表示相反的意思
2.5 if 语句
语法格式:
if [ 条件 ]
then
指令1
elif [ 条件2 ]
then
指令2
else
指令3
fi
2.6 case语句
语法格式:
case 变量名 in
值1)
指令1
;;
值2)
指令2
;;
值3)
指令3
;;
esac
注意:
首行关键字是case,末行关键字esac
选择项后面都有 )
每个选择的执行语句结尾都有两个分号;
case语句较于if多条件时,相对简洁,代码量少,容易看清
2.7 for循环语句
语法格式:
#!/bin/bash
# for语句的使用示例,遍历文件
for i in $(ls /root)
do
echo "${i}"
done
2.8 while语句
语法格式:
while 条件
do
执行语句
done
注意:
条件的类型:
命令、[[ 字符串表达式 ]]、(( 数字表达式 ))
只要满足条件一直执行下去
2.9 until语句
语法格式:
until 条件
do
执行语句
done
注意:
条件的类型:
命令、[[ 字符串表达式 ]]、(( 数字表达式 ))
只要条件不满足就一直循环下去
3. 复杂流程控制语句
函数就是我们的复杂流程控制语句
3.1 简单函数
函数格式:
函数名(){
函数体
}
调用函数:
函数名
注:不调用函数不生效
示例:脚本函数传参
#!/bin/bash
# 函数传参演示
# 定义传参数函数
dayin(){
echo "wode mingzi shi $1"
}
# 函数传参
dayin $1