shell技巧分享(七)

这是一个系列文章,主要分享shell(部分功能仅适用于bash)的使用建议和技巧,每次分享3点,希望你能有所收获。

1 echo替换字符串

$ str="12121212"
$ echo ${str/1/a}
a2121212
$ echo ${str//1/a}
a2a2a2a2

在命令行将某些字符串替换成其他字符串,可以借助echo实现该功能。由示例中可以看到,使用一个斜杠(/)只替换首次出现的字符,使用2个斜杠(/)替换所有字符。

2 备份文件

lbak函数定义:

lbak(){
    if [[ $# -ge 1 ]]; then
        cp -rf $1 $1.bak
    fi
}

示例:

$ ls
$ touch test
$ echo 123 > test
$ cat test 
123
$ lbak test 
$ ls
test  test.bak
$ cat test.bak 
123

在linux上修改某些关键文件时,建议先将原文件备份再修改,不然修改后出问题,想恢复比较不易。通过定义一个lbak函数,自动实现文件备份,生成后缀名为bak的文件。由示例中可以看到,创建的test文件,在修改之前,通过lbak命令备份该文件,备份后会在当前目录自动生成一个test.bak文件,如果修改完文件test后,需要恢复该文件,直接将test.bak覆盖test文件即可,所以也可以定义一个lunbak函数,用于自动将备份文件恢复。

3 命令行子命令自动补齐

$ cat demo.bash 
_demo()
{
    COMPREPLY=()
    local cur=${COMP_WORDS[COMP_CWORD]};
    local cmd=${COMP_WORDS[COMP_CWORD-1]};
    case $cmd in

    'demo')
          COMPREPLY=( $(compgen -W 'foo bar help version' -- $cur) ) ;;
    '*')
          ;;
    esac
}

complete -F _demo demo
$ source demo.bash 
$ demo 
bar      foo      help     version  

linux的自动补齐功能非常强大,通过其提供的框架,可以给自己的命令行添加自动补齐功能。由示例中可以看到,首先创建一个demo.bash的shell脚本,该脚本需具有可执行权限,然后在当前终端source该脚本。此时,如果执行demo命令,按tab键会自动打印出相应的子命令,如果输入子命令的首字母按tab键,会自动补齐子命令,很方便就能实现命令的自动补齐功能。

LEo at 00:05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏栗霖积跬步之旅

java多线程编程核心技术——第一章总结 1.5sleep()方法

1.1进程、多线程的概念及线程的优点 进程的概念: 百度百科讲解: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和...

20110
来自专栏技术专栏

慕课网Flask高级编程实战-2.搜索书籍路由编写

将上一小节的判断语句全都写到search函数中的几个缺点: 1.使得代码非常的臃肿,现在只有两个判断就占用了6行,如果有多个判断,search方法就要爆炸了 ...

2943
来自专栏阮一峰的网络日志

汇编语言入门教程

学习编程其实就是学高级语言,即那些为人类设计的计算机语言。 但是,计算机不理解高级语言,必须通过编译器转成二进制代码,才能运行。学会高级语言,并不等于理解计算机...

3294
来自专栏小狼的世界

PHP手册阅读笔记

学习PHP以来一直希望有时间能够有时间通读PHP手册,最近终于强迫自己划出一些时间,完成了对PHP手册的通读。除了函数参考部分没有每个都看,其他的章节基本上都看...

1724
来自专栏Python爬虫与算法进阶

Python中的小魔法(二)

01 函数 局部变量 x = 66 def func(x): print('x等于', x) x = 6 print('局部变量x改变...

2754
来自专栏蓝天

细节决定品质:不良的if/else使用习惯

这个时候应当考虑提取成函数调用,以减少直接的if/else嵌套层次。同理,while/for也应当避免这种情况。

901
来自专栏Coco的专栏

【基础进阶】URL详解与URL编码

1869
来自专栏Vamei实验室

Linux并发与同步

典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也都基于进程。尽管实...

2569
来自专栏栗霖积跬步之旅

java并发编程的艺术——第四章总结

第四章并发编程基础   java语言是内置对多线程支持的。   为什么使用多线程:     首先线程是操作系统最小的调度单元,多核心、多个线程可以同时执行,能够...

2727
来自专栏Hongten

JSP 三讲

3601

扫码关注云+社区

领取腾讯云代金券