重启shell

方法一:断开链接,重启登陆
方法二:source /etc/profile
在 ~/.bash 中定义的函数可以直接执行,帅!
每当修改了,~/.bash 时,source ~/.bashrc 才会生效。

转义

当参数中含有 \ ,需要转义,有两种转义方案:

  1. # 错误代码
  2. echo a\b\c
  3. # abc

第一种方案

  1. echo "a\b\c"

第二种方案

  1. echo a\\b\\c

分隔符

空白是分割符号。

  1. a=this is a # 这样的写法会报错

换行符

在bash 中,每个命令是通过 分号或者换行符来分割的。

  1. cmd1;cmd2
  2. # 等同于
  3. cmd1
  4. cmd2

打印命令

echo 像 Java 中的中 println ,每行结尾自带一个 \n 换行符。
但是, printf 却不会自带换符号,一般用来字符串格式化。

linux 命令标记

我们可以给一些复杂的命令打上标签,这些标签可以提醒你相关 Linux 命令的作用。在对 Linux 命令应用标记之后呢,我们就可以不用输入又长又复杂的命令啦,只需要输入我们设置好的标记字符就 OK 了!
下面拿一个命令进行示范吧,比如在当前目录中查找和列出大于 10MB 的文件,并按大小对它们进行排序:

  1. $ find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z

不知道你们还记不记得这个命令是干嘛的呢?不记得的同学自行一部分一部分拆开分析哈。
因为它太长了,作用也没办法一眼看出来,所以我们可以在它的末尾添加一个便于记忆的标记,最好是能体现命令的作用滴,比如这里设置 ListFilesBiggerThanXSize

  1. $ find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z #ListFilesBiggerThanXSize

注意:以 # 开头,并且命令和标签名称之间留有空格。
赶紧试试效果,输入刚才的标记:

  1. $ !? #ListFilesBiggerThanXSize

在这里,!和 ? 运算符用于获取并运行我们之前从 BASH 历史记录中标记的命令。

  1. [alvin@VM_0_16_centos ~]$ find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z #ListFilesBiggerThanXSize
  2. total 104K
  3. 16K httpd.c
  4. 16K shakespeare
  5. 12K hello
  6. 4.0K dir2
  7. [alvin@VM_0_16_centos ~]$ !? #ListFilesBiggerThanXSize
  8. find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z #ListFilesBiggerThanXSize
  9. total 104K
  10. 16K httpd.c
  11. 16K shakespeare
  12. 12K hello
  13. 4.0K dir2

使用 {} 自动拼接

用花括号括起来的字符串用逗号连接,可以自动扩展,非常有用,直接看例子:

  1. $ echo {one,two,three}file
  2. onefile twofile threefile
  3. $ echo {one,two,three}{1,2,3}
  4. one1 one2 one3 two1 two2 two3 three1 three2 three3

你看,花括号中的每个字符都可以和之后(或之前)的字符串进行组合拼接,注意花括号和其中的逗号不可以用空格分隔,否则会被认为是普通的字符串对待。

这个技巧有什么实际用处呢?最简单实用的就是给cp,mv,rm等命令扩展参数:

给 file 复制一个叫做 file.bak 的副本, 这个操作亮眼!!!

  1. $ cp /very/long/path/file{,.bak}
  2. # 给 file 复制一个叫做 file.bak 的副本
  3. $ rm file{1,3,5}.txt
  4. # 删除 file1.txt file3.txt file5.txt
  5. $ mv *.{c,cpp} src/
  6. # 将所有 .c 和 .cpp 为后缀的文件移入 src 文件夹