Windows10 + WSL(Ubuntu 20.04LTS) 用的越来越多,就想系统的入门一下: vim 和 Linux Shell
Vi(m) 入门
所有类 Unix 系统都自带 vi,所以学习 vi 收益满满!
vi(m) 工作模式图解
常见命令(区分大小写) | 含义 |
---|---|
gg |
移动到当前文件的第一行 |
G |
移动到当前文件的最后一行 |
M |
移动到当前文件的中间一行 |
Ctrl + o |
移动到上一次编辑的地方 |
:n , 其中 n 为数字 |
输入一个 : ,再输入一个 数字 ,按回车,快速跳到某一行 |
ndd ,其中 n 为数字(不写默认为 1) |
删除光标所在的行,并且内容在剪切板 |
nyy ,其中 n 为数字(不写默认为 1) |
复制光标所在的行,并且内容在剪切板 |
D |
删除 光标 到行 末尾 所有的内容,并且内容在剪切板 |
p |
粘贴剪切板的内容到光标处 |
/word |
向光标之下寻找一个名称为 word 的字符串 |
?word |
向光标之上寻找一个字符串名称为 word 的字符串。 |
n |
这个 n 是英文按键。继续搜索下一个目标 |
N |
这个 N 是英文按键。与 n 刚好相反 |
Ctrl + v |
进入列选择模式 |
Shift + v |
进入行选择模式 |
u |
复原前一个动作 |
Ctrl+r |
重做上一个动作 |
Ctrl+n |
常规(Normal)补全 |
Ctrl+o |
全能(Omni)补全 |
.vimrc
超简洁设置:
1 | syntax on " 语法高亮 |
vi(m)键盘图
vi(m) 命令思维导图
Linux Shell 入门
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh
,它同样也可以改为 #!/bin/bash
。
Hello Shell
vim test.sh
编辑下面内容
1 | !/bin/bash |
esc
+ :wq
保存,执行下面命令
1 | #使脚本具有执行权限 |
Shell 变量
1 | hello=123 # 变量定义 |
变量定义
=
两边不能有空格!
Shell 字符串
1 | myBlog='dna049.com' #单引号里的任何字符都会原样输出, 不支持转义 |
Shell 传递参数
$n
:传入参数,例如:$0 $1 $2
分别表示,脚本名,第一个参数,第二个参数$#
:脚本后面跟的参数个数(不包含脚本名)$@
:所有参数,并且可以被遍历$*
:所有参数\$$
:当前脚本的进程 ID (没有\
)$?
:上一条命令的退出状态
Shell 数组
1 | array=(A B "cpp" D) |
Shell 运算符
- 算数运算符:
+ - * / % = == !=
- 关系运算符:
-eq -ne -ge -lt -gt -le
- 布尔运算符:
! -o -a
(取否,or,and) - 逻辑运算符:
&& ||
,需要:[[ expr ]]
- 字符串运算符:
= != -z -n $
- 文件测试运算符:
-b -c -d -f -g -k -p -u -r -w -x -s -e
1 | a=11;b=22 |
expr 是一款表达式计算工具,使用它能完成表达式的求值操作
条件表达式要放在方括号之间,并且要有空格,例如L:
[$a==$b]
是错误的,必须写成[ $a == $b ]
Shell printf 命令
printf format-string [arguments...]
例如: printf "%-8s = %10.4f\n" pi 3.141592653
%s %c %d %f
都是格式替代符
%-8s
指一个宽度为 8 个字符(-
表示左对齐,没有则表示右对齐),如果不足则自动以空格填充,超过也会将内容全部显示出来。
Shell 流程控制
条件控制
if else-if else
已经在上面例子中提过了。case esac
的奇葩写法,吐了1
2
3
4
5
6
7
8
9
10
11
12
13
14
15echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esacread
输入快乐啊!
循环控制:for while until break continue
1 | 例子来自 https://www.runoob.com/linux/linux-shell-process-control.html |
Shell 函数
1 | funWithParam(){ |
Shell 输入/输出重定向和文件包含(特别好用!)
1 | $ echo "菜鸟教程:www.runoob.com" > users |
test2.sh 中调用 test.sh:
source ./test.sh
管道运算符
|
,是 unix 一个很强大的功能。command 1 | command 2
把第一个命令 command 1 执行的结果作为 command 2 的输入,例如:
$ ls -s|sort -nr