V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
b0644170fc
V2EX  ›  程序员

如何更好的学习 shell 编程

  •  
  •   b0644170fc · 2020-11-23 05:51:46 +08:00 · 5930 次点击
    这是一个创建于 1462 天前的主题,其中的信息可能已经有所发展或是发生改变。
    shell 编程对于服务器开发我干觉很重要。但是 shell 的语法也让我很琢磨不透。有没有什么网站或者资料之类的可以让我大量的练习 shell 编程。平常自己找场景练习 shell 的机会感觉还是太少了。有了解的大佬知道有类似的网站或资料吗?
    36 条回复    2020-11-24 08:30:44 +08:00
    Livid
        1
    Livid  
    MOD
       2020-11-23 06:05:40 +08:00   ❤️ 10
    https://www.oreilly.com/library/view/bash-cookbook-2nd/9781491975329/

    能够用 shell 解决的各类实际问题。
    opensail
        2
    opensail  
       2020-11-23 06:25:26 +08:00 via Android
    @Livid 感谢
    Death
        3
    Death  
       2020-11-23 08:05:01 +08:00 via Android
    也可以看一下这个,有很多练习与例子 https://tldp.org/LDP/abs/html/
    hanxiV2EX
        4
    hanxiV2EX  
       2020-11-23 08:22:50 +08:00 via Android
    学完基础语法后,多练习就好了,平时遇到想不起来的搜索一下就好了。我经常想不起来 for 循环语句如何写
    zouzou0208
        5
    zouzou0208  
       2020-11-23 08:54:26 +08:00
    @Livid 收藏了,谢谢。
    eccstartup
        6
    eccstartup  
       2020-11-23 09:04:59 +08:00 via Android
    很多功能可以用 python 做了,可以考虑写 python 脚本。
    Kobayashi
        7
    Kobayashi  
       2020-11-23 09:06:55 +08:00 via Android   ❤️ 2
    @Death 友情提示,ABSD, Advanced Bash-Scripting Guide 是 IRC #bash 公认的臭名昭著的教程。

    https://www.reddit.com/r/linuxadmin/comments/8q99sk/advanced_bashscripting_guide_an_indepth/
    > Here is what the bot in #bash on freenode has to say about the guide:

    > The infamous "Advanced" Bash Scripting Guide should be avoided unless you know how to filter out the junk. It will teach you to write bugs, not scripts. In that light, the BashGuide was written: http://mywiki.wooledge.org/BashGuide

    写 bug,学 ABSD 。
    Kobayashi
        8
    Kobayashi  
       2020-11-23 09:16:07 +08:00 via Android
    @Kobayashi 系统学习 Bash 推荐读一下 wooledge wiki 中 BasgGuide 。这个 wiki 更大的精华在于其 FAQ 和 Pitfalls 两个板块。好像是 IRC #bash 总有人遇到这些问题而归纳出的常见错误。
    no1xsyzy
        9
    no1xsyzy  
       2020-11-23 09:17:11 +08:00
    @Kobayashi 哈哈 @谭浩强
    yalin
        10
    yalin  
       2020-11-23 09:21:44 +08:00
    在 CentOS 机器上面安装一下 Oracle
    Kobayashi
        11
    Kobayashi  
       2020-11-23 09:29:49 +08:00 via Android
    还有个趣事儿。zinit 作者曾经炮轰 zsh 社区 antigen 管理不善,认为后者作为 zsh 官方社区插件管理器,引入了很多垃圾代码,很有 ABSG programming style

    https://www.reddit.com/r/zsh/comments/536rdy/want_to_try_zsh_again_what_about_antibody/
    xiaket
        12
    xiaket  
       2020-11-23 09:34:44 +08:00
    我们公司有个不成文的规则, 超过一定行数的 bash 脚本会被要求改写成 python.
    Death
        13
    Death  
       2020-11-23 09:45:02 +08:00
    @Kobayashi
    这个我还是第一次知道,感谢提醒。
    itabas016
        14
    itabas016  
       2020-11-23 09:45:34 +08:00 via Android
    多写就好了。先用 bash 写自动化功能,实在复杂的再用 py
    chaleaoch
        15
    chaleaoch  
       2020-11-23 10:21:36 +08:00   ❤️ 1
    太复杂的用 python. 简单的看看阮一峰老师的博客就足够了.

    wangdoc.com
    reyleon
        16
    reyleon  
       2020-11-23 10:48:15 +08:00
    @Kobayashi 很明显 Advanced Bash-Scripting Guide 是拿来当手册用的啊,我就觉得这书当手册相当好
    Kobayashi
        17
    Kobayashi  
       2020-11-23 15:01:14 +08:00
    我说的不是 Advanced Bash-Script Guide 是属于手册还是教程的问题。我只是在 reddit 上不止一次看到人提及其为垃圾。

    https://www.reddit.com/r/commandline/comments/8q99nd/advanced_bashscripting_guide_an_indepth/e0hiuh1/

    https://www.reddit.com/r/bash/comments/4l8w53/cash_library_of_function_review/d3lqqt4/

    尽管大部分人都是草台班子,但学的话谁都想学好,不想学的是错误的写法,不是吗?
    Kobayashi
        18
    Kobayashi  
       2020-11-23 15:01:29 +08:00
    f6x
        19
    f6x  
       2020-11-23 15:05:08 +08:00
    shell 不是拿来学的, 是拿来用的.

    每次(查)用完, 再多 man 十分钟就行了.
    beidounanxizi
        20
    beidounanxizi  
       2020-11-23 15:07:24 +08:00
    https://book.douban.com/subject/11589828/ Linux 命令行与 shell 脚本编程大全
    ChristopherWu
        21
    ChristopherWu  
       2020-11-23 15:25:19 +08:00
    @f6x 你这说法明显就没好好学过 shell...
    mcfog
        22
    mcfog  
       2020-11-23 15:27:35 +08:00
    "shell 编程对于服务器开发(人员)很重要"
    “看资料大量练习 shell 编程可以提高 shell 编程能力”

    这几个隐藏的命题我觉得都是值得商榷的

    甚至

    “shell 可以编程”

    我觉得某种角度来说也不成立 :doge:
    cmdOptionKana
        23
    cmdOptionKana  
       2020-11-23 15:30:23 +08:00
    @xiaket 其实我觉得 shell 的主战场是一次性的简单需求,用完即弃,凡是需要保存起来日后多次使用的,都是改成 python 更好(至少日后看一眼代码就知道干嘛,可读性都强很多)。
    xiaket
        24
    xiaket  
       2020-11-23 16:07:53 +08:00
    @cmdOptionKana 看工具, 如果某个领域特定的工具比较强大, 那么直接用 cli 比调用 API 要方便很多. 比如我自己经常用的 awscli 大多数时候都够用了, 正常的需求一条或少数几条命令就搞定了, 那么这个场景下, shell 脚本会比 python 脚本更好, 因为此时 shell 的可读性甚至更好.

    但是如果没有这样特定领域的命令行工具, 老老实实拿 py 写 lib 吧.
    ericwood067
        25
    ericwood067  
       2020-11-23 16:14:05 +08:00
    @Kobayashi 我一直以这个为重要参考的,没事了还翻几页,可能已经中毒了,😂
    lework1234
        26
    lework1234  
       2020-11-23 16:46:11 +08:00
    使用 shell 脚本, 基于 kubeadm 一键部署 kubernetes HA 集群, 轻松帮您打造一个可在 生产环境下使用的健壮集群。
    https://github.com/lework/kainstall

    可以看看这个例子,多写写需求就练习好了。
    wmhx
        27
    wmhx  
       2020-11-23 16:54:44 +08:00
    试试 awk 里面 C++, 干个把月就会了.
    LudwigWS
        28
    LudwigWS  
       2020-11-23 16:59:54 +08:00 via iPhone
    SHELL 是世界上最难的语言:)
    xiaket
        29
    xiaket  
       2020-11-23 19:26:17 +08:00
    @lework1234 我觉得这位是给反面教材...
    YaakovZiv
        30
    YaakovZiv  
       2020-11-23 20:34:13 +08:00
    @xiaket 学习进步的路上总是需要绊脚石,楼主就需要体验一下什么是技术的跳跃 :D
    vision1900
        31
    vision1900  
       2020-11-23 21:03:46 +08:00
    Linhuai
        32
    Linhuai  
       2020-11-23 23:39:02 +08:00
    跟着大佬的步伐学习
    omph
        33
    omph  
       2020-11-23 23:44:12 +08:00
    在 linux 上需要重复做 2 次以上的事,都用 shell 实现,马上你就会熟悉的
    omph
        34
    omph  
       2020-11-23 23:49:55 +08:00
    我写过一堆小脚本,管理多个蓝牙设备的、获取天气的、切换外接屏幕显示的、识别 /生成二维码、简易爬虫。。。等等
    K4
        35
    K4  
       2020-11-24 00:26:59 +08:00 via iPhone
    语法的话,man bash 就够了
    angryfish
        36
    angryfish  
       2020-11-24 08:30:44 +08:00 via iPhone
    没有啥语法,学会 if for 字符串处理,基本够了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2380 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 16:02 · PVG 00:02 · LAX 08:02 · JFK 11:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.