第一次写shell脚本遇到的一些问题

最近的一个任务需要用shell脚本实现,这也是我第一次正式的写shell脚本。由于之前没怎么写过shell脚本,所以流程的每一步我都需要上网查,然后实验,过程还是挺艰难的。网上能查到的比较多的相关知识我就不赘述了,写一些我认为不是特别多的吧。

脚本要实现一个什么功能呢?在服务器上实现嵌入式设备程序的自动下载、编译、升级、验证

下载:git下载,多地址,多分支,多版本,需要校验。

编译:简单cmake编译,只不过是需要支持多个编译链而已,没什么可说的。

升级:在脚本中telnet到验证用的嵌入式设备中,将升级包tftp到设备中,运行新升级包。

验证:验证升级包是否能够正常运行,验证成功需要版本号增加再git push。

大概就是这么一个逻辑,脚本是配合其他服务一起实现一个非常方便的功能,这里不细说。但看上面的描述应该能够大概知道这个脚本的功能。下面写一点我学到的。

 

1、git clone代码可以直接带用户名密码,不用再手动输入用户名,再输入密码。需要注意的是"@"需要换成"%40",这个网上有相关博客。

地址格式大概这样: git    clone     -b     分支名     https://用户名:密码@剩余git地址

 

2、在脚本中telnet到设备需要用到另外一种语言的脚本expect,在java开发中经常需要,因为他们需要ssh到另外一台设备,这个使用用expect脚本实现自动输入用户名和密码非常容易,我使用的telnet也不例外。

 

3、expect脚本慎用sleep,能不用就不用。sleep的执行时间也许不是你所想的,我的脚本加sleep就是在添加sleep前面一些行执行的。所以我拆分了多个脚本实现了我的功能,需要等待的时候是退回到bash脚本中进行的sleep。

 

4、expect脚本慎用set timeout XX命令。这个命令是修改每行命令的超时时间,脚本好像是以文本中最后一个set timeout的时间为准,也就是说不支持动态调整。有些命令你想10秒钟超时,有些你想30秒超时,对不起,实现不了。所以我进行了脚本拆分。

 

5、expect脚本的执行某个可执行程序。我这里需要在expect脚本中 ./ 执行新程序,这里我又不得不进行了脚本的拆分,因为我直接在expect中执行,我的expect脚本无法退回到我的bash脚本。无论我是否后台,等待多久,程序就是无法退回。

 

其他的我就不写了,都是shell非常普遍的功能,各种:传参,if判断,while循环,字符串分割,字符串替换,查找某个字符,git的回滚,git的提交,文本的修改(sed)......这些在网上你找有很多,没什么太大记录价值。如果有想了解的可以留言,如果知道我会答复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值