GitHub星数1.3W!五分钟带你搞定Bash脚本使用技巧
发布日期:2021-07-01 03:59:29
浏览次数:2
分类:技术文章
本文共 2247 字,大约阅读时间需要 7 分钟。
点击上方“民工哥技术之路”选择“置顶或星标”
每天10点为你分享不一样的干货
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 coloris_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 512345$ arr=(red red green blue blue)$ remove_array_dups "${arr[@]}"redgreenblue本书完整的脚本功能的代码片段如下:
关于作者
Dylan Araps是来自澳大利亚墨尔本的开源开发人员,从小就对开源产生了极大的热情,多年来开源了许多项目,14岁,就离开了学校,开始专注于 Linux、编程和其他相关技能的学习,Dylan Araps开源的项目得到了广泛的应用,并在Unix和Linux社区中得到广泛关注。
开源最前线(ID:OpenSourceTop) 综合整理
综合自:https://leanpub.com/u/dylanaraps、https://leanpub.com/u/dylanaraps
关注民工哥技术之路微信公众号,在后台回复关键字:1024 可以获取一份最新整理的技术干货。
-近期干货分享 -
微信扫描二维码关注民工哥技术之路
公众号后台回复「目录」可以查看公众号文章目录大全,回复「加群」可以加入读者技术交流群,与大家一起交流。
点击【阅读原文】和民工哥一起学技术、搞事情~~
不管怎样 点“在看”一定不能放弃啊转载地址:https://mingongge.blog.csdn.net/article/details/99669911 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年05月04日 16时40分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Proftpd MySQL [Step by Step]
2019-05-02
EFI Shell 命令参考
2019-05-02
HP-UX oracle RAC 双机实践
2019-05-02
解决SHELL脚本中的export无法生效的问题【转】
2019-05-02
linux中的sh脚本语法【转】
2019-05-02
Linux 内核通用链表学习小结【转】
2019-05-02
区别数据结构中的堆栈与内存中的堆栈的个人总结【转】
2019-05-02
六、判断两个单向链表是否相交
2019-05-02
七、两个有序链表合并(递归方式)
2019-05-02
C++拷贝构造函数(深拷贝,浅拷贝)【转】
2019-05-02
C++ 内联函数 (讲解的TM真好)【转】
2019-05-02
什么时候需要定义拷贝构造函数【转】
2019-05-02
c++类的构造函数详解【转】
2019-05-02
C++中判断数据类型的函数【转】
2019-05-02
const在函数前与函数后的区别【转】
2019-05-02
C++中的mutable关键字【转】
2019-05-02
c++中冒号(:)和双冒号(::)的用法【转】
2019-05-02
python中各种下划线的含义
2019-05-02
《计算机视觉-一种现代方法(第2版)》读书笔记三:早期视觉(一幅图像)
2019-05-02
《计算机视觉-一种现代方法(第2版)》读书笔记六:应用之图像搜索和检索
2019-05-02