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

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

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

每日英文

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

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

每日掏心话

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


责编:乐乐

640?wx_fmt=jpeg

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

   00 前言   


Bash脚本比我们想象中的都要强大,通过Bash脚本,大多数任务都可以让你在无任何其它语言或第三方依赖的安装环境下,快速写出脚本程序。
在Bash中调用外部进程是非常繁琐的,过度调用会导致明显的减速,通过内置方法编写的脚本和程序会更快,所需的依赖也会更少,并且帮助你更好的理解编程语言。
640?wx_fmt=png
有位澳大利亚工的程师在Github上开源了一本书——《pure bash bible》
640?wx_fmt=png
目前,这本书已经在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
本书完整的脚本功能的代码片段如下:
640?wx_fmt=jpeg
关于作者
640?wx_fmt=png
Dylan Araps是来自澳大利亚墨尔本的开源开发人员,从小就对开源产生了极大的热情,多年来开源了许多项目,14岁,就离开了学校,开始专注于 Linux、编程和其他相关技能的学习,Dylan Araps开源的项目得到了广泛的应用,并在Unix和Linux社区中得到广泛关注。

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

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

640?wx_fmt=png

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

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

猜你还想看

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

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

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

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

团队中的 Git 实践

嘿,你在看吗640?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值