shell指令
-
传输文件scp指令 https://zhuanlan.zhihu.com/p/542926236
-
mkdir -p [PATH] 级联创建目录
-
查看文件
- cat -s [FILE] 查看文件内容并删除多余空行
- tail -[n] [FILE]
- head -[n] [file]
-
查看命令历史
- history -[n,option]
-
打印文件内容(把string输出到某个文件,默认到终端)
- echo -[file] 例如打印环境变量 echo $PATH
-
通配符
* 匹配任意长度的字符串 ? 匹配一个长度的字符 [abc] 匹配abc中一个字符 [a-z] 匹配a到z之间的一个字符 [^a] 匹配除了a之外的内容
-
管道‘’|‘’与wc
- 例如:ls usr/bin |wc -w 查看bin目录下多少个文件,wc统计单词命令
-
grep与管道结合 例如:ps -ef|grep bash
-
输入多个指令用 " ; " 相隔
-
ctrl命令
- ctrl+d 结束命令
- ctrl+l 清屏
- ctrl+c 中断任务
- ctrl+z 将任务放入后台(jobs、fg [n]、bg[n]、)
-
输入输出重定向
重定向符 > file 输出到file,新建模式,已存在就删除再新建 >> file 输出到file,追加模式 < file 将file作为输入 2> 或 &> 将由命令产生的错误信息输入到文件中
-
命令置换使用 `` 或$()
例如 ls `pwd` 或 ls $(pwd)将pwd执行结果作为ls的参数
-
环境变量 export或env
-
diff指令与patch包
diff hello1.c hello2.c > test.patch //“<”跟着要删除的内容,“>”跟着要增加的内容
vim命令
- vim常用指令
编辑模式:
aio,AIO//小写编辑,大写一般用来快速定位;A:行尾 I:行首;O:上方插一行;o:下方插一行
底行指令:
:!pwd
:!date
:q
:q!
:x //保存退出
:wq //保存退出
:w //保存文件,不退出
:w [file] //另存为文件,不退出
:r [file] //在当前文件光标处插入读取的文件内容
复制粘贴
[n]x //删除光标开始的n个字符
[n]dd
[n]yy
p或P //粘贴
u //取消上一次操作
进阶
跳转:
:[n] //移动光标到指定一行
1G //移动到文首
G //移动到文末
:set nu //添加行号
:set nonu //取消行号
查找:
/[string] //查找string
n //下一个
N //上一个
支持正则表达式:
/^[string] //查找以string开头的行
替换:
:s/str1/str2
:s/str1/str2/g //全文替换
:.,$s/str1/str2 //.当前行;$最后一行
精细化复制剪切:
y0 //行首至光标复制
y$ //光标至行尾复制
d0
d$
块复制删除:
:.,$y
:.,$d
- 使用vim-plug进行vim扩展
- vim.zip
## 安装vim-plug
地址:https://github.com/junegunn/vim-plug
将plug.vim下载下来,在.vim目录下新建个autoload,丢进去
## 打开vim,使用PlugInstall
##打开.vimrc,进行以下配置
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
Plug 'majutsushi/tagbar'
Plug 'kien/rainbow_parentheses.vim'
Plug 'airblade/vim-gitgutter'
Plug 'scrooloose/nerdcommenter'
Plug 'rking/ag.vim'
Plug 'altercation/vim-colors-solarized'
Plug 'jiangmiao/auto-pairs'
Plug 'valloric/youcompleteme'
call plug#end()
"配置基础设置
set nu
set ts=4
"" NerdTree插件的配置,文件树状图
" 打开vim时,自动打开NERDTree
"autocmd vimenter * NERDTree
" 将F2设置为开关NERDTree的快捷键
map <F2> :NERDTreeMirror<CR>
map <f2> :NERDTreeToggle<cr>
" 修改树的显示图标
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
" 窗口位置
let g:NERDTreeWinPos='left'
" 窗口尺寸
let g:NERDTreeSize=10
" 窗口是否显示行号
let g:NERDTreeShowLineNumbers=1
" 不显示隐藏文件
let g:NERDTreeHidden=0
"" nerdcommenter配置,快接注释
" <leader>c<space> 注释/取消注释
" <leader>cc // 注释
" <leader>cm 只用一组符号注释
" <leader>cA 在行尾添加注释
" <leader>c$ /* 注释 */
" <leader>cs /* 块注释 */
" <leader>cy 注释并复制
" <leader>ca 切换 // 和 /* */
" <leader>cu 取消注释
" 注释的时候自动加个空格(可选)
" let g:NERDSpaceDelims=1
"" tagbar设置,变量显示窗口
" 设置tagbar使用的ctags的插件
let g:tagbar_ctags_bin='/usr/bin/ctags'
" 设置tagbar的窗口宽度
let g:tagbar_width=30
" 设置tagbar的窗口显示的位置,为左边
let g:tagbar_left=1
" 打开文件自动 打开tagbar
" autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen()
" 映射tagbar的快捷键
map <F3> :TagbarToggle<CR>
"" rainbow_parentheses设置,彩虹括号
" 自动开启以及颜色配置
let g:rbpt_colorpairs = [
\ ['brown', 'RoyalBlue3'],
\ ['Darkblue', 'SeaGreen3'],
\ ['darkgray', 'DarkOrchid3'],
\ ['darkgreen', 'firebrick3'],
\ ['darkcyan', 'RoyalBlue3'],
\ ['darkred', 'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown', 'firebrick3'],
\ ['gray', 'RoyalBlue3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue', 'firebrick3'],
\ ['darkgreen', 'RoyalBlue3'],
\ ['darkcyan', 'SeaGreen3'],
\ ['darkred', 'DarkOrchid3'],
\ ['red', 'firebrick3'],
\ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces
"" 配置solarized主题色
" SSH连接终端使用solarized Dark主题
"if $SSH_CONNECTION
" syntax enable
" set background=dark
" colorscheme solarized
"endif
"" 设置autopairs
" 添加<>
" let g:AutoPairs['<']='>'
"" 设置youcompleteme补全插件
set nocompatible
let g:ycm_global_ycm_extra_conf='~/.vim/plugged/YouCompleteMe/.ycm_extra_conf.py'
let g:ycm_show_diagnostics_ui = 0 " 关闭语法提示
let g:ycm_complete_in_comments=1 " 补全功能在注释中同样有效
let g:ycm_confirm_extra_conf=0 " 允许 vim 加载 .ycm_extra_conf.py 文件,不再提示
let g:ycm_collect_identifiers_from_tags_files=1 " 开启 YCM 标签补全引擎
let g:ycm_min_num_of_chars_for_completion=1 " 从第1个键入字符就开始罗列匹配项
let g:ycm_cache_omnifunc=0 " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_seed_identifiers_with_syntax=1 " 语法关键字补全
let g:ycm_goto_buffer_command = 'horizontal-split' " 跳转打开上下分屏
" 配置ycm颜色
"highlight PMenu ctermfg=0 ctermbg=242 guifg=yellow guibg=white
"highlight PMenuSel ctermfg=242 ctermbg=8 guifg=white guibg=yellow
let g:ycm_semantic_triggers = {
\ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
\ 'cs,lua,javascript': ['re!\w{2}'],
\ }
let g:ycm_filetype_whitelist = {
\ "c":1,
\ "cpp":1,
\ "objc":1,
\ "py":1,
\ "sh":1,
\ }
shell脚本编程
-
在.sh文件中有以下命名规则 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2NslF2rW-1685452309803)(D:\BaiduSyncdisk\笔记\image-20221208132444583.png)]
-
shell功能性语句
#!/bin/sh或/bin/bash 表明执行编译器 read var1 var2 ... #read读取输入 算数运算命令 expr (+,-,\*,/,%) 例如:A=`expr 3 + 5 \* 4` 注意算数运算需要空格 测试命令 test -eq -ne -gt -lt -ge -le -d
-
条件语句
if [ expression1 ] #注意空格 then expression2 exit elif [ expression3 ] then expression4 exit else expression5 fi
-
选择语句
#!/bin/bash echo -n "please choose(yes|no)?" read A case $A in yes | YES | Y | y | Yes) echo "yes" ;; no) echo "no" ;; *) echo "wrong" ;; esac
-
循环语句
#!/bin/bash for I in `seq 1 2 10` #seq指令,1-10,步长为2 do echo "I" done 另一种写法 for ((I=1 ; I <=10 ; I++)) do echo "I" done I=0 while [ $I -lt 5] do I=`expr $I + 1` echo "$I" done