Vim的使用与Bash
一、Vim的使用
[i],[o],[a],[r](插入替换)
一般模式 ——————————> 编辑模式
—————————————— ——————————————————
光标移动,搜索替换 <—————————— 以插入替换来编辑内容
[Esc]
[:],[/],[?]
删除字符,整行 ——————————> 命令行模式
—————————————— ——————————————————
复制整行,粘贴整行 <—————————— 读取/保存文件
[Esc]
- 块选择:
1) [v],[V],[Ctrl]+[v]
2)光标移动
3)[y]
- 多文件编辑,可实现文件之间内容的复制
:n 编辑下一个文件,:N 编辑上一个文件,:files 查看所有的文件
- 多窗口功能 :sp{filename}
窗口之间的切换: [Ctrl] + [w] + [j] / [Ctrl] + [w] + [下] 移到下方的窗口
[Ctrl] + [w] + [k]/ [Ctrl] + [w] + [上] 移到上方的窗口
[Ctrl] + [w] + [q] 结束当前的窗口
- vim环境设置与记录 ~/.vimrc
vim的设置值一般存放在/etc/vimrc文件中,可以使用 # vim ~/.vimrc进行修改,但是不建议这样操作。
二、Bash
硬件、内核与Shell
图形 ————> 用户界面 ——————> 核心 ————> 硬件
—————— ——————————————— ———— ————————
文字界面 <———— Shell,KDE,applications <—————— Kernel <———— Hardware
接受来自用户的指令 控制硬件工作,包括CPU进程 系统工作的实体
内存管理和IO
shell的功能只是提供用户操作系统的一个借口,需要调用其他的命名(软件)来执行,狭义上shell就是bash命令,广义上shell也包括图形界面软件。
/bin/bash (Linux默认的shell)
Bash shell的功能:命令的记忆、命令与文件的补齐、命令别名的设置功能、作业控制,前后台的控制、程序脚本、通配符。
Shell
一、shell的变量功能
- 变量的显示 $ echo
- 变量的修改 $ 变量名=变量值
- 环境变量功能: $ env 可以列举出当前shell环境下所有的环境变量。
环境变量的举例:
- HOME:代表主文件夹
- SHELL:目前环境代表的shell程序
- HISTSIZE:可纪录的历史命令的条数
- MAIL:读取的邮件文件
- PATH:执行文件查询路径
- LANG:语系数据
- RANDOM:随机数变量
变量的有效范围:一般情况下,父进程的自定义变量无法在子进程内使用,除非通过export将其变为环境变量,否则就是自定义变量。(与内存分配的记忆块有关)
- read 读取来自键盘输入的变量: $ read [-pt] variable
- declare和typeset是一样的功能用来声明:$ declare [-aixr] variable
-a: variable为数组类型
-i: variable为integer类型
-x:用法与export一致
-r:变量设置为readonly,只读类型,不可以修改
数组变量类型:array
- 设置方法: $ var [index]=context bash的数组下标是从0开始的。
数组名 下标 变量值
- 读取方式: $ echo ${var[1]}
变量内容的删除、替换:
- 变量设置方法 说明
${变量#关键字} 若变量内容从头开始数据符合”关键字“,则将符合的最短数据删除。
${变量##关键字} 若变量内容从头开始数据符合”关键字“,则将符合的最长数据删除。
${变量%关键字} 若变量内容从尾开始数据符合”关键字“,则将符合的最短数据删除。
${变量%%关键字} 若变量内容从尾开始数据符合”关键字“,则将符合的最长数据删除。
${变量/旧字符串/新字符串} 替换第一个符合的字符串。
${变量//旧字符串/新字符串} 替换全部符合的字符串。
- 变量的测试与内容的替换
new_var=${old_var-content}
新变量 关键字 旧变量 变量内容
三、Bash Shell操作环境
一个命令被执行时,命令执行的顺序是:
- 以相对/绝对路径执行命令。
- 由alias找到该命令并执行。
- 由bash内置的(builtin)命令执行。
- 通过$PATH变量的顺序找到第一个来执行。
Shell
一、通配符与特殊符号
通配符 | |
* | 0到无穷个任意的字符 |
? | 一定有一个任意字符 |
[] | 一定由一个[]中的字符 |
[-] | 编码顺序内所有的字符 |
[^] | 一定有一个非[]中的字符 |
特殊符号 | |
# | 批注符号,视为说明,并不执行 |
转义字符,将后面的内容还原为原来的意思 | |
| | 管道,风格两个管道命令的界定 |
; | 连续命令的执行 |
~ | 用户的主文件夹 |
$ | 使用变量的前导符 |
& | 作业控制,命令变成背景下工作 |
! | 逻辑非 |
/ | 目录符号 |
>,>> | 数据流重定向,输出 |
<,<< | 数据流重定向,输入 |
' ' | 无变量置换的变量表示 |
" " | 有变量置换的变量表示 |
` ` | 先执行的命令 |
() | 子shell的起始与结束标志 |
{} | 中间为块命令的组合 |
二、shell其它指令及功能
- 数据流重定向:某个命令执行后的内容会打印在屏幕上的数据需要传输到其它的地方,可以使用 > 和 >>命令输出到其它的地方(>会覆盖原有的内容,而>> 不会覆盖只会累加)。
- 命令质性判断依据:
cmd1 ; cmd2 执行完cmd1,执行cmd2
cmd1 && cmd2 cmd1正确执行则执行cmd2
cmd1 || cmd2 cmd1正确执行则不执行cmd2
- 管道命令:bash执行命令时会有输出数据出现,如果这样的数据需要经过几道手续才能得到结果,则使用管道命令"|"。后面的命令必须是可以接收STDIN数据的命令。
- 选取命令:
cut可以将一段信息的某一段切出来。
# cut -d ‘分隔字符’ -f field
# cut -c 字符范围
grep 分析一行的信息
# grep [-acinv] [--color=auto] '字符串' filename
- 排序:
# sort [-fbMnrtuk] [file or stdin]
- 双向重定向 tee 可以将stdin输出到屏幕的同时并输出到文件中 # tee [-a] file
- 字符转换命令:
# tr [-ds] SET1 ... 删除一段信息中的文字或者文字替换
# col [-xb] -x tab转为空格,-b 文字内有转义字符时直接保留后的内容
# join [-ti12] file1 file2 两个文件中相同数据一行加在一起
# paste [-d] file1 file2 不进行对比直接将两个文件贴在一起
# expand [-t] file tab转空格
三、Shell Script 程序化脚本
命令行汇整执行,类似与程序的编写,但是不需要编译执行,
利用shell的功能所写的一个纯文本的程序,在一些shell语法与命令卸载里面配合正则表达式,管道和重定向达到处理的目的。
shell script执行的方法:
直接命令执行 shell.sh 文件必须具备rx的权限, 以bash进程来执行,通过./she.sh或shell she.sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH