查看原文
其他

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

民工哥技术之路 民工哥技术之路 2021-12-16

点击上方“民工哥技术之路”选择“置顶或星标”

每天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 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


关注民工哥技术之路微信公众号,在后台回复关键字:1024 可以获取一份最新整理的技术干货。

-近期干货分享 -

周末生产事故!一次心惊肉跳的服务器入侵排查

中国互联网史就是一部流氓史!

要不是这些沙雕插件,我早就被公司开除了。

跳来跳去,到底去大公司还是小公司?

SQL常犯的这8 大错误,打死都不要犯!

Linux 系统故障排查和修复技巧

微信扫描二维码关注民工哥技术之路

公众号后台回复「目录」可以查看公众号文章目录大全,回复「加群」可以加入读者技术交流群,与大家一起交流。

点击【阅读原文】和民工哥一起学技术、搞事情~~

不管怎样
点“在看”一定不能放弃啊
: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存