点击上方 "程序员小乐"关注公众号, 星标或置顶一起成长

每天早上8点20分, 第一时间与你相约

每日英文

Always remember that in life. Whatever we do, we are never defeated unless we give up.

永远要记住,无论我们做什么,人生从来都没有失败,唯一的失败就是自己放弃。

每日掏心话

生活就是一只看不见的储蓄罐,你投入的每一份努力都不会白费。

责编:乐乐

程序员小乐(ID:study_tech)第 633 次推文   图片来自网络

往日回顾:GitHub 标星 7k+,面试官的灵魂 50 问,问到你怀疑人生!

   00 前言   

Bash脚本比我们想象中的都要强大,通过Bash脚本,大多数任务都可以让你在无任何其它语言或第三方依赖的安装环境下,快速写出脚本程序。
在Bash中调用外部进程是非常繁琐的,过度调用会导致明显的减速,通过内置方法编写的脚本和程序会更快,所需的依赖也会更少,并且帮助你更好的理解编程语言。
有位澳大利亚工的程师在Github上开源了一本书——《pure bash bible》
目前,这本书已经在Github上获得 13148 个Star,905 个Fork(Github地址: https://github.com/dylanaraps/pure-bash-bible )
本书收集汇总了编写 bash 脚本经常会使用到的一些代码片段,无论是常见和不太常见的方法都可以在这书里找到,通过书中的代码片段,可以删除脚本中的依赖项,并且在大多数情况下可以让程序运行的更快。
书中依照字符串、数组、正则表达式、文件处理、变量等脚本程序的常用功能进行分类,每个分类下都提供了具体 bash 代码实现。
删除字符串前后空格:
例如,下面的函数通过查找字符串前后空格字符,并把它们移除。以下为功能使用:
trim_string() {  # Usage: trim_string "   example   string    "    : "${1#"${1%%[![:space:]]*}"}"  : "${_%"${_##*[![:space:]]}"}"  printf '%s\n' "$_"
}
示例:
$ trim_string "    Hello,  World    "
Hello,  World   $ name="   John Black  "
$ trim_string "$name"
John Black

在字符串上使用正则表达式:
regex() {  # Usage: regex "string" "regex" [[ $1 =~ $2 ]] && printf '%s\n' "${BASH_REMATCH[1]}"
}
用法示例:
$ # Trim leading white-space.
$ regex '    hello' '^\s*(.*)'
hello   $ # Validate a hex color.
$ regex "#FFFFFF" '^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$'
#FFFFFF $ # Validate a hex color (invalid).
$ regex "red" '^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$'
# no output (invalid)
脚本的示例用法:
is_hex_color() { if [[ $1 =~ ^(#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3}))$ ]]; then printf '%s\n' "${BASH_REMATCH[1]}"  else    printf '%s\n' "error: $1 is an invalid color."  return 1    fi
}   read -r color
is_hex_color "$color" || color="#FFFFFF"   # Do stuff.
删除重复的数组:
remove_array_dups() { # Usage: remove_array_dups "array"    declare -A tmp_array    for i in "$@"; do    [[ $i ]] && IFS=" " tmp_array["${i:- }"]=1    done    printf '%s\n' "${!tmp_array[@]}"
}
用法示例:
$ remove_array_dups 1 1 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 5
1
2
3
4
5   $ arr=(red red green blue blue)
$ remove_array_dups "${arr[@]}"
red
green
blue
本书完整的脚本功能的代码片段如下:
关于作者
Dylan Araps是来自澳大利亚墨尔本的开源开发人员,从小就对开源产生了极大的热情,多年来开源了许多项目,14岁,就离开了学校,开始专注于 Linux、编程和其他相关技能的学习,Dylan Araps开源的项目得到了广泛的应用,并在Unix和Linux社区中得到广泛关注。

开源最前线(ID:OpenSourceTop) 综合整理

综合自:https://leanpub.com/u/dylanaraps、https://leanpub.com/u/dylanaraps

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入程序员小乐技术群,在公众号后台回复“加群”或者“学习”即可。

猜你还想看

不会SQL注入,连漫画都看不懂了

中美互联网科技公司对比图!你有的,我们也有!

教你用Python将图片转化为字符画!附源代码

太牛逼了,居然有人将各大编程语言绘成了一部编年史!

团队中的 Git 实践

嘿,你在看吗

GitHub星数1.3W!五分钟带你搞定Bash脚本使用技巧相关推荐

  1. GitHub标星1.3W!五分钟带你搞定Linux Bash脚本使用技巧

    原文:https://mp.weixin.qq.com/s/NnpyTOAghr_MXXK5H9twAg 来自:开源最前线(ID:OpenSourceTop)  综合自:https://leanpub ...

  2. 五分钟学会python函数_五分钟带你搞懂python 迭代器与生成器

    前言 大家周末好,今天给大家带来的是Python当中生成器和迭代器的使用. 我当初第一次学到迭代器和生成器的时候,并没有太在意,只是觉得这是一种新的获取数据的方法.对于获取数据的方法而言,我们会一种就 ...

  3. 软件测试教程编发中长发,真人教程︱短发、中发、长发的六款速成编发,手残党五分钟就能搞定!...

    原标题:真人教程︱短发.中发.长发的六款速成编发,手残党五分钟就能搞定! 大家好,我是安哥拉·兔. 我之前说过吧,我跟狗哥在家互相剪头发,结果一发不可收拾,我的头发就越来越短了,但我还蛮喜欢现在这样子 ...

  4. 并联谐振电路工作原理详解,案例+计算公式,几分钟带你搞定

    昨天给大家分享了关于串联谐振的文章,今天给大家分享关于并联谐振的文章.(私信我的那个朋友,记得准备来看) 错过了串联谐振的朋友,可以直接点击下方标题跳转. 串联谐振是怎么工作的?案例+公式,几分钟,一 ...

  5. 数据结构 5分钟带你搞定哈希表(建议收藏)!!!

    对比之前博客讨论的二叉排序树 二叉平衡树 红黑树,它们的查找都是先从根节点进行查找,从节点取出数据或索引与查找值进行比较.那么,有没有一种函数H,根据这个函数和查找关键字key,可以直接确定查找值所在 ...

  6. c++ map用法_Python专题——五分钟带你了解map、reduce和filter

    点击上方蓝字,和我一起学技术.今天是Python专题第6篇文章,给大家介绍的是Python当中三个非常神奇的方法:map.reduce和filter.不知道大家看到map和reduce的时候有没有什么 ...

  7. RC振荡器工作原理分析,案例+公式,几分钟,带你搞定RC振荡器

    在前面我已经给大家介绍了三种振荡器,Colpitts 振荡器.皮尔斯振荡器.哈特利振荡器.如果错过的话,可以点击下方标题直接跳转. colpitts振荡器电路图分析,几分钟,立马搞定colpitts振 ...

  8. JAVA蘑菇西餐,小丫厨房:十分钟就可搞定西餐 蒜蓉蘑菇八步简单做

    原标题:小丫厨房:十分钟就可搞定西餐 蒜蓉蘑菇八步简单做 (央视财经<回家吃饭>)热爱美食的饭团们一定都知道米其林级别餐厅,但对于小编而言这"米其林"一直都是听说,还真 ...

  9. linux 测试端口连通性_磨刀不误砍柴工,带你搞定云网络系统性能测试

    磨刀不误砍柴工,带你搞定云网络系统性能测试 一.前言 在部署或管理网络系统时,我们更多的是关心网络的连通性,而对于其整体的性能往往考虑不多,或者即使考虑到性能.异常或稳定性的问题,但却发现没有合适的手 ...

最新文章

  1. 自定义windows下自动清除文件夹或者文件的只读属性的脚本
  2. 3D 引擎 Unity 2019.1 正式发布,引入新的轻量级渲染管道
  3. iText in Action 2nd5.4节(Adding page events to PdfWriter)读书笔记
  4. 【转载】飞鸽传书2013官方下载
  5. Github 再现失误:部分用户密码明文暴漏
  6. 2018年股票操作策略记录(1)
  7. java8的新特性详解-----------Lamda表达式
  8. 「三分钟系列06」3分钟看懂http与https的区别
  9. AngularJS学习之旅—AngularJS 事件(十四)
  10. [生活日记] 社会真的这么乱?尼姑也行骗,道德何在
  11. 自然语言处理NLP星空智能对话机器人系列:Facebook StarSpace框架案例数据加载
  12. 启明星辰产品解读_IPS
  13. 数据库系统(DBS)组成
  14. easyexcel操作遇到的坑
  15. vs怎么配置c语言codemac,在Mac上使用vs-code快速上手c语言学习(入门文,老鸟退散)...
  16. 《信息化项目文档模板四——系统建设方案模板》
  17. 软件测试经理评说ISTQB认证价值
  18. ESP32 之 ESP-IDF 教学(五(2))——使用C++的工程
  19. 二本Java小菜鸟4面字节跳动被秒成渣渣,深度集成!
  20. win ce车载系统刷机包_Android 11 喜讯!小米 10 率先尝鲜,官方刷机包发布下载

热门文章

  1. 网页设计之标题栏显示当前系统日期
  2. 全球及中国装配式建筑行业深度研究与发展模式咨询报告2022版
  3. 使用Cent Browser+Aria2+Bilibili Envolved下载b站视频--保姆级安装步骤
  4. 37岁被裁员,出来再找工作,大公司不愿要,无奈去小公司面试,HR的话扎心了
  5. 在linux文件下执行.kjb文件和trans文件
  6. 华兴数控g71外圆循环编程_数控车G71内外圆切削复合循环
  7. 飞凌课堂丨液晶模块的DE和HV模式
  8. 1477: 多重继承派生(1)--家具、床、沙发和沙发床
  9. Linux网络编程(三)
  10. 月模拟题3 201609-3 炉石传说