shell脚本
简述
标志:#! 目的告诉系统后面的路径文件以那种脚本来执行,有#! bin/sh(标准)和#!bin/bash (替代)
扩展名:.sh(扩展名不影响脚本执行)
执行文件:chmod +x ./test.sh #使该脚本文件具有执行权限
./test.sh #直接执行脚本
注释:##之后的一行都为注释内容,该行会被解释器忽略
变量:定义变量 varible='test' #变量名与等号之间不能有空格,必须紧密相连,变量后不能有;
使用变量 ${varible} #使用变量时,一般用${}括起来
遇到非真返回的语句,就结束脚本执行
常用操作
字符串操作 t_string='I\'m a good programmer'
求长度: ${#t_string}# 21
字符串截取:${t_string:2:5} # m a
数组 t_array=(item1 item2 item3)# 定义数组用圆括号包起来,元素之间采用空格分隔,只能定义一维数组
t_array[0]=item1# 也可单独进行变量赋值,复制下标可以不连续,且范围不限制
读取数组的值方法:${数组名[下标]} ${t_array[0]}#下标的值小于10时,正常,大于10时娶不到 对应数组的值,需要用${10}扩起来使用
读取数组所有的值:${t_array[@]}
获取数组的长度:${#t_array[@]}#和字符串的获取方法相
alias 为常用或名字较长的命令,指定别名
sleep 延时操作
输出命令
echo:输出命令(自动添加换行)
参数 -e表示开启转义
\c 表示不换行
printf: printf(format-string, [arguments···])
format-string 格式控制字符串
[ arguments ···] 参数列表
set命令
set命令的实质或目的就是为了使脚本运行跟安全和健壮,便于排查异常,如下:
set -u : 表示使用未初始化的变量时,自动推出;相同作用的命令有set -o nounset#shell脚本一般在变量未定义前使用,不会报错
set -x : 表示在脚本命令运行之前,先输出执行脚本命令本身;相同命令set -o xtrace# 用于脚本调试
set -e : 表示若有出现返回非真的命令语句,就直接退出该脚本,尽早捕获错误;相同命令set -o errexit# 一般位于脚本的开始位置,可以通过set -e 表示开启该模式,set +e表示关闭该选项
set -o pipefail : 和set -e的作用有点类似,都是判断脚本命令,但是后者遇到 用 | & 这种复合的管道,不能达到理想效果,一般shell的返回值都以最后一个命令的返回值为准,而后者是指只要其中的一个子命令失败,那么认为整个管道就失败了,脚本终止;
一般来说,我们的脚本都是混合使用set命令的,如set -xe | set -uxe
sed命令
sed(stream editor) 流编辑器,配合正则表达式使用,进行替换
替换语法:标准格式为 sed 's/pattern/replace_string/' file# pattern为正则表达式,replace_string为要替换的字符 file为目标文件
我们canary项目中,实际案例:sed -i'' "s/\"max\"/\"$CPU_NUM\"/g" process.json
其中:
i 用于直接修改原file
replace_string/后面的标示分类:没有 => 表示只替换匹配的第一个
2 => 表示替换第二个
g => 表示替换所有
2g =>表示从n处开始替换
curl命令
curl命令是一个利用URL规则在命令行下工作的文件传输工具,常用为下载工具
基本用法: curl url > index.html
xx代码示例:
【curl -s -o-https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh| bash】
【curl --fail --retry 3 -F "name=myfe/canary" -F "file=@update.tar.gz"filename】
tar命令
tar命令实质进行打包和解包文件的
标准语法tar [params] modifiedFile originFile
tar -czf update.tar.gz * 将所有文件都打包到update.tar.gz文件中
关键字
shell脚本上传图片
1、touch uoload.sh创建upload.sh文件
2、vi upload.sh编辑upload.sh文件
3、cat upload.sh查看upload.sh文件
4、rm -rf upload.sh删除upload.sh文件
5、scp /文件path 服务器地址 上传到远程服务器
6、bash upload.sh执行代码
总结:shell是一些命令的集合