热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vim和shell脚本(及vimrc配置方法)

愛を知る

视频教程:https://www.bilibili.com/video/BV1H7411s7xH?p=2&spm_id_from=pageDriver

1. 配置vimrc

工欲善其事,必先利其器。为了让编写shell脚本更容易,用户可以自己配置vimrc,从而实现语法高亮、error提示以及增加其他插件功能。详细可以参考这个博客《手把手教你把Vim改装成一个IDE编程环境》:https://blog.csdn.net/wooin/article/details/1858917

我想要vim实现的主要功能有:

  1. 语法高亮
  2. 语法错误即时提示

1.1 语法高亮

首先配置.vimrc,输入

syntax on

以开启语法高亮。选择molokai配色方案。将molokai.vim文件下载到~/.vim/colors
文件夹下(没有则创建)
在.vimrc文件中添加

colorscheme molokai

即可

1.2 语法错误检查工具

使用插件:Syntastic
git地址:https://github.com/vim-syntastic/syntastic
需要先安装pathogen(vim插件工具)
中文版安装指引可参考:https://blog.csdn.net/lpb2019/article/details/102757318

1.3 .vimrc配置概览

" get rid of compatible mode to avoid bugs"
set nocompatible
" show the line number"
set number
" use evening mode for background"
color evening
" highlight the syntax"
syntax on
" set color scheme"
colorscheme  molokai
set t_Co=256
set background=dark
" highlight search results"
set hlsearch
" searching when input"
set incsearch
" indent automaticlly when open a new line"
set smartindent
" complete the brackets"
set showmatch
" syntastic config
execute pathogen#infect()
syntax on
set background=dark
"
 highlight search results"
set hlsearch
"
 searching when input"
set incsearch
"
 indent automaticlly when open a new line"
set smartindent
"
 complete the brackets"
set showmatch
"
 syntastic config
execute pathogen#infect()
syntax on
filetype plugin indent on
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

2变量

2.1 声明脚本

#!/usr/bin/env bash

#!
声明自己是一个脚本文件,后面表示脚本使用的解释器以及存在的位置。在首行加了声明之后,在terminal输入

chmod u+x xx.sh #使文件可执行

就可以使用./xx.sh
命令执行脚本了。

没有加声明的话需要用bash
命令执行.

2.2 变量

#!/usr/bin/env bash

PRICE_PER_APPLE=5
greeting='Hello         world!'
echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE"
echo 'The price of an Apple today is: \$HK $PRICE_PER_APPLE'

  1. 变量名区分大小写

  2. =左右两边不能有空格

  3. 单引号包围的字符串中不对特殊符号做解释执行*(引号里啥样打出来就是啥样)*  ;双引号对特殊符号进行解释执行

  4. 使用**\转义符号**避免被解释执行。

    例如上面的代码中单双引号输出区别如下。

image-20211108095319926
  1. 使用**${}包围变量名**避免变量名被解释执行时的二义性。

    例如

MyFirstLetters=ABC
echo "The first 10 letters in the alphabet are:
${MyFirstLetters}DEFGHIJ"


如果不加{}那么系统会认为后边一串都是变量,出现报错。

  1. 使用双引号包围变量名可以保留所有空格字符,否则默认只输出一个空格。

    例如

    greeting='Hello         world!'
    echo $greeting "now with spaces: $greeting"

    得到:

    Hello world! now with spaces: Hello         world!

    可以看到双引号外边的变量中的空格被压缩成1个。

  2. 其他程序的输出结果通过**反引号``或者$()**直接赋值给shell变量

    FILELIST=`ls`
    FileWithTimeStamp=/tmp/file_$(/bin/date +%Y-%m-%d).txt

    得到

    1.sh 2.sh
    /tmp/file_2021-11-08.txt

3. 调试脚本

方法1

在terminal中执行脚本时,用 -x
使用调试模式:

bash -x 1.sh

得到结果:

+ greeting='Hello         world!'
echo Hello 'world!' 'now with spaces: Hello         world!'
Hello world! now with spaces: Hello         world!

其中以+为首的行代表脚本内容,不带+的行是输出内容

方法2

临时修改脚本,在脚本中需要调试的段落前后各加上开始和结束调试的命令行:

set -x   # activate debugging
content needs debug
set +x   # stop debugging

4. 给脚本传参

4.1 传参规则:

  • 参照使用C语言传参语法规范
  • 参数与参数之间、脚本文件名与参数之间使用1个或多个空格分隔
  • $0指代脚本文件本身
  • 2指代命令行上的第2个参数,以此类推

  • $@指代命令行上所有参数(参数数组)
  • $#指代命令行上的参数个数(参数数组大小)

4.2 示例

脚本内容:

echo $3
BIG=$5
echo "A $BIG costs just $6"
echo "$@"
echo $#

用调试模式执行得到:

image-20211108192145731

所有参数位置都为空(参数个数为0)

在执行脚本时传递参数:

bash -x test.sh apple 5 banana 8 "Fruit Basket" 15

结果

image-20211108192533438

5. 数组

规则:

  • declare -a 声明的是索引数组(数字下标),默认为索引数组;

  • declare -A声明的是关联数组(字符串下标);

  • 如果同时使用-a -A,-A优先级更高,声明为关联数组。

遍历数组的方法

# 遍历索引数组
for i in "${array[@]}“;do
 echo "
$i"
done
# 关联数组
for key in "
${!associative_arr[@]}";do
 echo "
${associative_arr[$key]}"
done





推荐阅读
author-avatar
用户rmgq8prdxo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有