V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
gaoyadianta
V2EX  ›  Linux

shell 脚本的教程

  •  
  •   gaoyadianta · 2017-06-09 16:07:07 +08:00 · 6593 次点击
    这是一个创建于 2760 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家有什么推荐的么,在线教程或者书籍都可以,欢迎推荐

    第 1 条附言  ·  2017-06-12 10:12:35 +08:00
    看大家好多人好像对 shell 脚本的易用性都是槽点慢慢,那大家一般用什么脚本做类似的工作呢?能完全替代 shell 的
    51 条回复    2017-06-11 14:35:45 +08:00
    jswh
        1
    jswh  
       2017-06-09 16:17:51 +08:00
    man bash
    falcon05
        2
    falcon05  
       2017-06-09 16:21:37 +08:00
    自己学,然后写一本。
    gaoyadianta
        3
    gaoyadianta  
    OP
       2017-06-09 16:24:41 +08:00
    @falcon05 咳咳,正在自己学,怎么学呢
    gaoyadianta
        4
    gaoyadianta  
    OP
       2017-06-09 16:26:02 +08:00
    @jswh 现在好像默认的 shell 是 dash 吧,这样 man 出来的是命令行?跟写脚本文件一样?
    jswh
        5
    jswh  
       2017-06-09 16:28:28 +08:00
    @gaoyadianta 我不知道 dash,但是大部分都是兼容 bash 的。而且,一般服务器端的脚本执行也都是 bash 吧。
    magic3584
        6
    magic3584  
       2017-06-09 16:33:42 +08:00
    cxbig
        7
    cxbig  
       2017-06-09 16:43:55 +08:00
    鸟哥的 Linux 系列书籍不错。
    实际运用都是拿到需求后 Google 解决方案。
    linus3389
        8
    linus3389  
       2017-06-09 16:45:17 +08:00
    pip install cheat
    Miy4mori
        9
    Miy4mori  
       2017-06-09 16:51:10 +08:00 via iPhone
    我个人比较喜欢《 Shell 脚本学习指南》这本,另外我很好奇 dash 是什么?
    Miy4mori
        10
    Miy4mori  
       2017-06-09 16:52:17 +08:00 via iPhone
    @gaoyadianta 一般默认都是 bash,但是不一定,不过 sh 是都有的。
    aheadlead
        11
    aheadlead  
       2017-06-09 16:54:07 +08:00
    我觉得还是仔细考虑下是不是一定要用 shell
    感觉学 shell 非常痛苦… 各种奇技淫巧 读也读不懂
    gaoyadianta
        12
    gaoyadianta  
    OP
       2017-06-09 17:00:55 +08:00
    @Miy4mori sh 就是指向 dash 的软连接
    gaoyadianta
        13
    gaoyadianta  
    OP
       2017-06-09 17:01:32 +08:00
    @cxbig 我说的是脚本,不是 Linux 开发,基本语法之类的
    gaoyadianta
        14
    gaoyadianta  
    OP
       2017-06-09 17:02:13 +08:00
    @aheadlead 是呢,那你觉得什么脚本好一些,python 吗
    cxbig
        15
    cxbig  
       2017-06-09 17:06:50 +08:00
    @gaoyadianta
    你说的 dash 可能是一个 Mac 的技术手册 App
    1. sh 是 sh,bash 是 bash。他们不是一个东西,sh 更基础。
    2. shell 脚本就是基本 命令堆起来的。
    cxbig
        16
    cxbig  
       2017-06-09 17:09:06 +08:00
    @gaoyadianta
    如果你会 PHP/Python/Ruby/Go/Node 这些语言,可以用他们来实现你的需求。
    比原生 shell 来的快,只要目标机器装有这些语言的支持就行。
    Miy4mori
        17
    Miy4mori  
       2017-06-09 17:13:53 +08:00 via iPhone
    @gaoyadianta 我大概查了一下,你可能说的是 ubuntu 自某个版本后把 sh 指向了 dash,之前都是指向 bash 的。shell 脚本可以指定以什么 shell 执行的,这些都不是问题,最通用的应该还是 bash。
    gaoyadianta
        18
    gaoyadianta  
    OP
       2017-06-09 17:24:03 +08:00
    @cxbig 不是,我不用 mac,dash 是符合 posix 标准的 shell,是 ubuntu 默认的 shell,sh 就是指向 dash 的软连接。是命令堆起来的我知道,但是还是有差别的嘛,就比方说写循环,写函数之类的
    gaoyadianta
        19
    gaoyadianta  
    OP
       2017-06-09 17:26:15 +08:00
    @Miy4mori ubuntu6.5 以后就默认 dash 了,这俩差别很小,我去搜搜你说的那本
    gaoyadianta
        20
    gaoyadianta  
    OP
       2017-06-09 17:26:27 +08:00
    @magic3584 全英文看起来有压力啊
    neighbads
        22
    neighbads  
       2017-06-09 17:27:50 +08:00
    直接去翻系统的 脚本。。。。。翻个几个就差不多了。。。
    momocraft
        23
    momocraft  
       2017-06-09 17:37:53 +08:00
    仍然推荐 bash: 足够普及, 而且比 posix sh 多一些方便的功能. 看 abs 那本书就行.

    性能一般不是问题, 或者说需要 sh 做的事再慢也有限
    cxbig
        24
    cxbig  
       2017-06-09 17:42:35 +08:00
    @gaoyadianta
    要不你去确认一下? Ubuntu 默认的是 Bash,Dash 是哪来的?
    sh 是 linux 最核心的命令解释器,bash/zsh 这些是基于它的扩展。你搞反了。

    命令行也可以直接写函数和循环啊。shell 脚本文件只是一个承载命令的文件而已。
    gaoyadianta
        25
    gaoyadianta  
    OP
       2017-06-09 17:59:04 +08:00
    @knightdf 这网站不错啊,回头看看
    gaoyadianta
        26
    gaoyadianta  
    OP
       2017-06-09 17:59:24 +08:00
    @momocraft abs 那本?没懂
    gaoyadianta
        27
    gaoyadianta  
    OP
       2017-06-09 18:04:10 +08:00
    @cxbig 确认了,ubuntu 默认的就是 dash,https://wiki.ubuntu.com/DashAsBinSh
    只不过这两个的差别很小,怎么大家一直在讨论这个问题了...
    你说的我懂,但是我就是需要一个教程...比方说,我有一个很复杂的功能,总不能一行一行敲命令行吧,我要写脚本程序的话,语法缩进之类的和命令行是有差别的,关键是,命令行也要学啊,所以都得需要一个教程啊
    LCD
        28
    LCD  
       2017-06-09 18:14:17 +08:00 via Android
    恕我愚钝,dash 是啥?
    cxbig
        29
    cxbig  
       2017-06-09 18:24:24 +08:00
    @gaoyadianta
    好吧,算我孤陋寡闻,还真有个 Dash。从未用过。从 0804 上手 Ubuntu 开始就一直用的是 Bash。
    是有略微的差别,但是不大。你去网上搜的解决方案基本都可以直接放文件里跑。
    缩进不影响功能,只影响阅读。
    都是一步步来的,我也是一个个命令手动试,成功了放文件里。
    wlsnx
        30
    wlsnx  
       2017-06-09 18:24:48 +08:00
    shell 不是 python,不强制缩进,语法也和命令行没区别,教程到网上随便一找就有了。推荐《 Linux 命令行与 shell 脚本编程大全》,还有 https://github.com/jlevy/the-art-of-command-line
    deweixu
        31
    deweixu  
       2017-06-09 18:25:51 +08:00
    ynyounuo
        32
    ynyounuo  
       2017-06-09 18:47:18 +08:00
    @gaoyadianta
    @cxbig
    同样学习了,从没有了解过 dash - -
    gaoyadianta
        33
    gaoyadianta  
    OP
       2017-06-09 18:52:42 +08:00
    @cxbig 恩,好的
    @LCD 可以参考下回复,说的挺清楚了
    @wlsnx 还是有些需要注意的问题的,有些问题写命令行的话,是不会遇到的
    @deweixu 谢谢~
    momocraft
        34
    momocraft  
       2017-06-09 21:17:20 +08:00
    @gaoyadianta Advanced Bash-Scripting Guide http://tldp.org/LDP/abs/html/
    wanglaihuai
        35
    wanglaihuai  
       2017-06-10 00:06:41 +08:00 via Android   ❤️ 1
    大神们没人看过这个网站呢? http://man.linuxde.net
    cxbig
        36
    cxbig  
       2017-06-10 00:13:07 +08:00
    @wanglaihuai
    这个太差了,很简单的命令都识别不了。
    试试了下:
    find . -type f
    =>
    很抱歉,你查询的 *** 命令还没有被录入!

    用这个好了:
    https://explainshell.com/
    wanglaihuai
        37
    wanglaihuai  
       2017-06-10 00:16:54 +08:00 via Android
    @cxbig 原来如此,多谢大神指点😃
    Owenjia
        38
    Owenjia  
       2017-06-10 01:40:22 +08:00
    推荐看下下面这两个:
    穷佐罗的 Linux 书 http://liwei.life/category/shell/
    快乐的 Linux 命令行( The Linux Command Line 中文版) http://billie66.github.io/TLCL/index.html
    CYKun
        39
    CYKun  
       2017-06-10 03:10:02 +08:00 via Android
    《 Linux Shell 脚本攻略》
    happywowwow
        40
    happywowwow  
       2017-06-10 03:46:42 +08:00
    语法特性太多 我是记不住
    之前看这个 每次要写的时候还是要拿来看一看 http://www.cnblogs.com/barrychiao/archive/2012/10/22/2733210.html
    还有一个 http://mywiki.wooledge.org/BashFAQ
    sss3600123
        41
    sss3600123  
       2017-06-10 07:16:05 +08:00 via iPhone
    装了 fish,命令都可以补全,感觉还可以
    zdt3476
        42
    zdt3476  
       2017-06-10 09:54:09 +08:00
    我一般是要用到什么就去查什么,前提是有其他语言的基础,用的久了,基本的东西也学的 7788 了。
    Nanguage
        43
    Nanguage  
       2017-06-10 10:08:45 +08:00
    xiaket
        44
    xiaket  
       2017-06-10 11:45:06 +08:00
    @sss3600123 fish 的坑不是一般的多...
    robertzhouxh
        45
    robertzhouxh  
       2017-06-10 15:30:56 +08:00
    Vicer
        46
    Vicer  
       2017-06-10 16:50:18 +08:00 via Android
    我的博客有很多 shell,大多数是实用的。
    写的很烂,轻拍。
    https://moeclub.org
    cxbig
        47
    cxbig  
       2017-06-10 16:55:50 +08:00
    @sss3600123 不建议新人学 Fish
    毕竟不是普遍内置的工具,安装会额外增加系统负载,而且语法结构大不一样,和其他解析器的兼容较差。
    USCONAN
        48
    USCONAN  
       2017-06-10 17:05:26 +08:00
    dash 和 bash 的腳本不兼容比較坑
    TangMonk
        49
    TangMonk  
       2017-06-10 17:08:30 +08:00
    Fish 好用是好用,主要是很多主流的软件不兼容
    scinart
        50
    scinart  
       2017-06-10 19:42:17 +08:00 via iPhone
    Advanced Bash-Scripting Guide +1
    Reficul
        51
    Reficul  
       2017-06-11 14:35:45 +08:00
    ash,dash,bash,zsh,fish 各有各的不同,那些 awk,sed,grep 轮子都是方的,学起来痛苦无比=-=,不过学会了比用高级语言可能还能快一点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2872 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:12 · PVG 22:12 · LAX 06:12 · JFK 09:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.