重启shell
方法一:断开链接,重启登陆
方法二:source /etc/profile
在 ~/.bash 中定义的函数可以直接执行,帅!
每当修改了,~/.bash 时,source ~/.bashrc
才会生效。
转义
当参数中含有 \ ,需要转义,有两种转义方案:
# 错误代码
echo a\b\c
# abc
第一种方案
echo "a\b\c"
第二种方案
echo a\\b\\c
分隔符
空白是分割符号。
a=this is a # 这样的写法会报错
换行符
在bash 中,每个命令是通过 分号或者换行符来分割的。
cmd1;cmd2
# 等同于
cmd1
cmd2
打印命令
echo 像 Java 中的中 println ,每行结尾自带一个 \n 换行符。
但是, printf 却不会自带换符号,一般用来字符串格式化。
linux 命令标记
我们可以给一些复杂的命令打上标签,这些标签可以提醒你相关 Linux 命令的作用。在对 Linux 命令应用标记之后呢,我们就可以不用输入又长又复杂的命令啦,只需要输入我们设置好的标记字符就 OK 了!
下面拿一个命令进行示范吧,比如在当前目录中查找和列出大于 10MB 的文件,并按大小对它们进行排序:
$ find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z
不知道你们还记不记得这个命令是干嘛的呢?不记得的同学自行一部分一部分拆开分析哈。
因为它太长了,作用也没办法一眼看出来,所以我们可以在它的末尾添加一个便于记忆的标记,最好是能体现命令的作用滴,比如这里设置 ListFilesBiggerThanXSize:
$ find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z #ListFilesBiggerThanXSize
注意:以 # 开头,并且命令和标签名称之间留有空格。
赶紧试试效果,输入刚才的标记:
$ !? #ListFilesBiggerThanXSize
在这里,!和 ? 运算符用于获取并运行我们之前从 BASH 历史记录中标记的命令。
[alvin@VM_0_16_centos ~]$ find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z #ListFilesBiggerThanXSize
total 104K
16K httpd.c
16K shakespeare
12K hello
4.0K dir2
[alvin@VM_0_16_centos ~]$ !? #ListFilesBiggerThanXSize
find . -size +10M -type f -print0 | xargs -0 ls -Ssh | sort -z #ListFilesBiggerThanXSize
total 104K
16K httpd.c
16K shakespeare
12K hello
4.0K dir2
使用 {}
自动拼接
用花括号括起来的字符串用逗号连接,可以自动扩展,非常有用,直接看例子:
$ echo {one,two,three}file
onefile twofile threefile
$ echo {one,two,three}{1,2,3}
one1 one2 one3 two1 two2 two3 three1 three2 three3
你看,花括号中的每个字符都可以和之后(或之前)的字符串进行组合拼接,注意花括号和其中的逗号不可以用空格分隔,否则会被认为是普通的字符串对待。
这个技巧有什么实际用处呢?最简单实用的就是给cp,mv,rm等命令扩展参数:
给 file 复制一个叫做 file.bak 的副本, 这个操作亮眼!!!
$ cp /very/long/path/file{,.bak}
# 给 file 复制一个叫做 file.bak 的副本
$ rm file{1,3,5}.txt
# 删除 file1.txt file3.txt file5.txt
$ mv *.{c,cpp} src/
# 将所有 .c 和 .cpp 为后缀的文件移入 src 文件夹