热门标签 | 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





推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 用聪明的方式学习 Vim
    来自量子位Vim难学难用?但事实是,它依旧受许多程序员的欢迎。或许,只是你的「打开方式」不对。最近,在GitHub上便出现了 ... [详细]
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社区 版权所有