墨魇个人博客
  • 登录
  • Home
  • 碎碎念
  • 分类
    • PHP
    • SQL
    • Python
    • Linux
    • SEO
    • HTML
  • 音乐
  • 留言
  • 小伙伴
    首页 › 技术分类 › Linux › 程序员应该知道的10个Linux bash小技巧

    程序员应该知道的10个Linux bash小技巧

    墨魇
    十一月 10, 2018发布在 Linux
    1,577 0 0
    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

     

    1 ^x^y^

    我总在使用的一个小技巧。

    从来没有输入过类似的命令?

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    哎,这个命令敲错了,所以你要敲“↑”,然后敲”←“直到”p“,然后输入”e”再执行。

    或者这样输入:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    你可能需要注意的一个细节是:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    如果你想搜索“rep”,那你就要深入研究man page,学会使用这个更强大的命令:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    我不会在这里解释这个用法。。。

    2 pushd/popd

    这个在脚本中非常好用,特别是在循环中

    如下所示,假设你正在写一个进入退出文件夹的for循环:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    你可以像这样使用pushd栈来重写上方代码:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    它可以追踪记录你切换的目录并进行入栈或出栈

    注意,当使用pushd出现错误时,可能会丢失栈的记录并且popd多次。因此你可能会想要在脚本中使用set -e(见上一篇文章)

    当然也可以用cd -,但是它不会使用栈——仅仅返回前一个目录

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    3  shopt vs set

    这两个命令困扰了我一阵子。

    两者之间有什么不同呢?

    set在之前的文章已经介绍过了,而shopt看起来与之相似。只输入shopt会显示一系列选项:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    我在这里(  here)找到了一些答案。

    从根本上说,似乎有一系列的bash(和其他shells)建立在sh之上,而添加shopt命令则为设置额外的shell选项提供了一种方式

    但是我也不确定……如果你知道为什么,请告诉我。

    4 Here Docs 与 Here Strings

    “Here Docs”是在shell中用一些语句创建的文件。

    “诀窍”很简单。定义一个用于结束的单词,则在这个单词单独出现在一行之前的所有输入行将构成文件。

    像这样:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    注意:

    · 如果结束单词不是“单独”出现在一行中,那它可以构成文件

    · SOMEENDSTRING通常是END,但这仅仅只是习惯

    更鲜为人知的是“here string”:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    5 字符串变量的操作

    以前你可能是像下面展示的那样写代码,用sed一类的工具来操作字符串:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    但是你可能不知道bash本身也是可以的。

    这意味着你可以省去大量的sed和awk。

    一种重写上述代码的方式如下所示:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    ·#表示“从字符串开头开始匹配并删除所给的模式串”

    ·%表示“从字符串结尾开始匹配并删除所给的模式串”

    在我的电脑上,后一种方法比前一种快两倍。并且(令我吃惊的是),他的速度跟类似功能的python脚本速度大致相当

    如果你想使用通配符(见前文)模式串并采用贪婪模式,你需要双写:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

     

    6 变量的默认值

    这些对写脚本来说非常好用。

    如果你有一个没有赋值的变量,你可以像这样给它“赋默认值”

    创建一个default.sh文件,写入如下内容:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    现在执行chmod +x default.sh并用./default.sh first second来运行脚本:

    观察第三个参数的默认值是如何被分配的,而不是前两个。

    你也可以直接用${VAR:=defaultval}(等号,不是破折号),但是注意这不适用于脚本或函数中的位置变量。尝试修改上面的脚本来看它是如何失败的。

    7 Traps

    当一个信号被送到脚本时,内建的trap可以用于“捕获”

    下面是我用在自己的chepci脚本中的一个例子:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    任何使用TERM信号的CTRL-C,CTRL-或终止程序的操作将会首先调用cleanup

    注意

    ·trap的逻辑可能非常棘手(例如处理信号竞争条件)

    ·KILL信号不能以这种方式捕获

    但是大多数情况下,我会把它用于类似上述的‘cleanup’中,来达成函数的目的。

    8 Shell变量

    了解可用的标准shell变量是非常值得的。这些是我最喜欢的。

    RANDOM

    不要依赖这个来加密堆栈,但你可以生成随机数字,例如在脚本中创建临时文件时:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    REPLY

    不在需要给read一个变量名称

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    LINENO 与 SECONDS

    方便调试

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    注意,即便使用;来隔开命令,上面的代码也要分两行

    TMOUT

    可以用来超时读取,在一些脚本中真的很好用

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    9Extglobs

    如果你真的沉迷bash不能自拔,那么你可能想要增强你的通配功能。你可以通过设置shell中的extglob选项。这是设置方法:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    现在来看看你是否能指出以下这些语句各自的功能:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    虽然它可能很有用,但是很难想象出一种你必须要用这种方式的情况。通常你会使用一些更适合相应任务的工具(像sed)或者直接放弃bash去使用一些像python那样的“合适的”编程语言。

    10关联数组

    谈到移植到其他语言,一条重要的规则是,如果我需要用到数组,那么我会放弃bash,使用python(为此我甚至创建了一个Docker Container来运行一个专门的工具)

    知道读到它我才知道,在bash中有关联数组

    以下是演示:

    程序员应该知道的10个Linux bash小技巧-墨魇个人博客

    注意仅适用于bash4.x+版本

    Linux程序员
    0
    分享本文
    程序猿真的觉得写代码比女朋友重要吗?
    上一篇
    下一篇
    评论 (0)
    再想想
      贴标签
      HTML JavaScript js Linux MariaDB MySQL PHP PHP数组 Python SEO SQL swoole swoole +thinkPHP5 thinkPHP5 墨魇 墨魇个人博客 心情记 程序员 随笔
      相关文章
      带你走进 WebGL 中的图形噪声随机美学
      架构设计之「 CAP 定理 」
      28个有趣的Linux命令
      Centos7 防火墙 firewalld 实用操作

      他那时还太年轻,不懂所有命运馈赠的礼物早已在暗中标好了价格 最动人的戏,不是那些最完美的人生剧本。 而是那些认真演绎自己人生的人。

      Home 碎碎念 分类 PHP SQL Python Linux SEO HTML 音乐 留言 小伙伴
      李老湿技术博客 钟华博客 汉服社 明亮 松鼠乐园
      Copyright © 2016-2019 墨魇个人博客. Designed by 墨魇.
      未登录
      现在登录 / 注册,享受更多福利
      • 请到 [后台->外观->菜单] 中设置菜单
      热门搜索
      • 随笔
      • 心情记
      • 墨魇个人博客
      • Python
      • PHP
      • 墨魇
      • 程序员
      • Linux
      • MySQL
      • HTML
      • MariaDB
      • JavaScript
      • PHP数组
      • swoole +thinkPHP5
      • thinkPHP5
      • swoole
      • SEO
      • js
      墨魇
      墨魇,励志做一个出色的神经病患者 最动人的戏,不是那些最完美的人生剧本。 而是那些认真演绎自己人生的人。 而我生来就是丑角!
      119 文章
      76 评论
      162 喜欢
      Top