今天给大家分享一篇在我工作中常用的一个shell脚本,里面有一些我们常用到的shell操作。该脚本用于本地电脑和服务器交互上,实现以下功能:
- 自动拉取自己个人电脑上的源码到服务器上yocto包的源码文件夹。自动运行compile 、strip自动把编译好的结果回传到个人电脑上。拷贝执行文件到机器中
欢迎关注微信公众号:羽林君,或者添加作者个人微信:become_me
情节介绍:
在工作中,我们经常会遇到需要把修改的代码放到服务器去编译,然后把编译好的文件放到机器板卡对应的文件。这个过程如果我们使用命令的话,大概有七八条,完成操作完之后 ,大约会花费一分。虽然花费的时间不算多,但是你也会一直关注终端,然后等待输入命令,需要花费不小精力。但是我们可以写一些shell脚本来辅助我们的工作。今天就是给大家分享使用的脚本,一边分享使用过程,一边分享里面用到的shell技术点。包含,if判断、switch case条件、字符截取、远程调用脚本、两种免密登陆等。
三者的使用过程为:本地通过脚本输入参数选择使用wifi分配的ip还是网线分配的ip,然后进行ip数据传参形式 远程调用预先放置好的——服务器编译脚本,服务器脚本通过传入的ip参数,免密scp拷贝本地的文件到服务器执行目录,服务器执行编译工作,然后拷贝到本地的指定目录,最后调用本地的expect免密登陆的脚本,拷贝文件到机器中。
脚本一:本地选择脚本auto_build.sh
脚本内容如下:
#/bin/bash
remote_ip=172.160.111.32
remote_hostname=lyn
case?$1?in
????1)??echo?-e?' 33[0;42m?Ethernet?dhcp? 33[0m'
????????VAR="eno1"
????;;
????2)??echo?-e?' 33[0;46m?wireless?dhcp? 33[0m'
????????VAR="wlo1"
????;;
esac
HOST_IP=$(ifconfig?$VAR?|?grep?"inet"?|?grep?-v?inet6|?awk?'{?print?$2}'?|?awk?-F:?'{print?$1}')
echo?"parse?ip?is:"?$HOST_IP
if?[[?!?-n?"${HOST_IP}"?]]?;then
?echo?-e?" 33[0;31m?input?local?ip? 33[0m"
?read?local_ip
else
?if?[[?!?$(echo?"${HOST_IP}"?|?awk?-F.?'{printf?$1}')?==?"192"??]]?;then
??local_ip=$HOST_IP
?else
??echo?-e?" 33[0;31m?error?ip? 33[0m"
??exit?0
?fi
fi
#exit?0
if?[[?$2?==?1?]];then
?build_opt="all_build"
else
?build_opt=
fi
ssh?-t?${remote_hostname}@${remote_ip}?"/home/lyn/build.sh?ip=${local_ip}?${build_opt}"
这个部分有几处技术使用:
switch case使用,if else、免密登陆,远程调用脚本。
首先是一个switch case
此处作用是进行ip地址的筛选,因为的在调试过程中,我的电脑有时候用网线连接,有时候会去测试房去测试,用wifi连接,这个时候会进行网络ip地址的区分,当我输入./auto_build.sh 1的时候,脚本会进行解析eno1网线分配的ip地址,当我输入./auto_build.sh 2的时候则会解析wlo1wifi分配的ip。
在里面我还用了颜色打印,进行关键词的标注,如下所示:
关于颜色打印的部分这个是另一个知识,这是一个转义的实际使用过程,通过特定符号的转义识别,我们在Linux终端去显示不同颜色的打印输出,这个是我们经常使用的操作,例如log等级分级打印时候,error是红色,正常是绿色,普通是白色等。
颜色打印大致介绍如下:
转义序列以控制字符'ESC'开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。多数转义序列超过两个字符,故通常以'ESC'和左括号'['开头。该起始序列称为控制序列引导符(CSI,Control Sequence Intro),通常由 ' 33[' 或 'e[' 代替。
通过转义序列设置终端显示属性时,可采用以下格式:
526