- 在 bash 中,空格是用来区分参数的,给变量赋值不能带空格。
# wyk_ubuntu @ WYK-XPS in ~ [22:47:02] C:130
$ foo=bar
# wyk_ubuntu @ WYK-XPS in ~ [22:55:42]
$ foo = bar
zsh: command not found: foo
- 单引号只能表示纯字符串,双引号可以表示格式化字符串
# wyk_ubuntu @ WYK-XPS in ~ [22:57:28]
$ echo "hello $foo"
hello bar
# wyk_ubuntu @ WYK-XPS in ~ [22:57:42]
$ echo 'hello $foo'
hello $foo
- source命令
source FILENAME [ARGUMENTS] # [ARGUMENTS]是执行脚本的参数
. FILENAME [ARGUMENTS]
source 和 . 是同一个命令(在bash中是,在zsh中不是),将脚本执行并导入shell环境(函数,变量等)。如果 FILENAME 不是绝对路径,shell 会先在 $PATH 中找,然后在当前路径中找。
# wyk_ubuntu @ WYK-XPS in ~ [18:14:31]
$ source mcd.sh # 导入并执行mcd.sh脚本,其中包含mcd函数
# wyk_ubuntu @ WYK-XPS in ~ [18:14:36]
$ mcd abc # 在shell中可以直接执行mcd函数
- 逻辑运算
# 根据程序(命令)返回的error code来判断true/false
# || 和 && 均为顺序执行指令
# || 如果第一个命令(程序)为true,则不执行第二条命令
# && 如果第一个命令(程序)为false,则不执行第二条命令
# wyk_ubuntu @ WYK-XPS in ~ [19:01:21]
$ true || echo "hello"
# wyk_ubuntu @ WYK-XPS in ~ [19:02:43]
$ false || echo "hello"
hello
多条指令可以用 ;隔开,均会执行
# wyk_ubuntu @ WYK-XPS in ~ [19:11:54] C:1
$ echo "hi";echo "hello"
hi
hello
- cat 命令
cat 命令从一个或多个文件中读取内容作为输入,将内容首尾连接后输出到屏幕。如果没有文件参数,则从键盘读取输入。
通常用于展示文件内容,组合文件,创造新文件。
cat [OPTIONS] [FILE_NAMES]
$ cat <(ls) <(ls ..) # 组合文件
Transparency
wyk_ubuntu
# wyk_ubuntu @ WYK-XPS in ~ [9:00:36]
$ cat > new_create.txt # 创建新文件
something new
# <ctrl+D> 保存文件
# wyk_ubuntu @ WYK-XPS in ~ [9:18:36]
$ cat new_create.txt # 展示文件内容
something new
- 通配符(globbing)
# wyk_ubuntu @ WYK-XPS in ~ [11:12:36]
$ ls *.sh
mcd.sh try.sh try2.sh
- convert命令
用于处理图像,转换格式,大小等。
# wyk_ubuntu @ WYK-XPS in ~ [13:11:43]
$ convert image.{png,jpg}
- 用 {} 进行扩展
当有一串指令有相同的子字符串时,可以用 {} 进行扩展,甚至可以做笛卡尔积。
# wyk_ubuntu @ WYK-XPS in ~ [13:03:25]
$ touch {foo,bar}/{a..j}
# 等价于(press tab)
# wyk_ubuntu @ WYK-XPS in ~ [13:03:25]
$ touch foo/a foo/b foo/c foo/d foo/e foo/f foo/g foo/h foo/i foo/j bar/a bar/b bar/c bar/d bar/e bar/f bar/g bar/h bar/i bar/j
- 根据文件名查找
find path -option [ -print ] [ -exec -ok command ] {} \
可以根据条件(如名字,类型等)查找文件,并对其执行操作。
# wyk_ubuntu @ WYK-XPS in ~ [16:23:12]
$ find . -name "*.sh" -type f
./.oh-my-zsh/oh-my-zsh.sh
./.oh-my-zsh/plugins/catimg/catimg.sh
./.oh-my-zsh/plugins/drush/drush.complete.sh
./.oh-my-zsh/plugins/emacs/emacsclient.sh
# wyk_ubuntu @ WYK-XPS in ~ [16:25:30] C:1
$ find . -name "*.abcd" -type f -exec rm {} \;
fd path
fd命令是find的简洁版
# wyk_ubuntu @ WYK-XPS in ~ [16:32:57]
$ fd ".*sh"
abc.sh
locate [OPTION] PATTERN...
locate 命令通过建立索引来查找,速度更快但是功能较少,并且要手动更新索引
# wyk_ubuntu @ WYK-XPS in ~ [16:35:31] C:1
$ locate .bashrc
/etc/bash.bashrc
/etc/skel/.bashrc
# wyk_ubuntu @ WYK-XPS in ~ [16:37:17]
$ updatedb # 更新索引
- 根据文件内容查找
grep [OPTIONS] PATTERN [FILE...]
# wyk_ubuntu @ WYK-XPS in ~ [17:14:05]
$ sudo apt list | grep grep
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
agrep/focal 4.17-9.1 amd64
ext3grep/focal 0.10.2-4build1 amd64
grep/focal,now 3.4-1 amd64 [installed]
ripgrep
同样,ripgrep是其简洁版。(用 rust 装成功,别的都失败)
- history 命令
展示历史指令
# wyk_ubuntu @ WYK-XPS in ~ [17:16:39]
$ history | grep convert
203 convert image.jpg image.png
261 tldr convert
264 convert image.{jpg,png}
- <Ctrl+R>指令
在过去指令中搜索指定指令。
# wyk_ubuntu @ WYK-XPS in ~ [17:20:18]
$ convert image.jpg image.png
bck-i-search: convert_
再次 <Ctrl+R> 继续查询上一条。
- 文件展示
ls,tree,broot