第三章 vim 编辑器与 Shell 命令脚本

前言

每天更新一点 Linux 系统操作的命令,巩固自己的 Linux 的基础操作命令,学习 Linux 很久了,很多东西都忘的差不多了,是时候回顾回顾。

3.1 Vim文本编辑器

三种模式

  • 命令模式:控制光标移动,可以对文本进行复制、粘贴、删除和查找等工作
  • 输入模式:正常的文本录入
  • 末行模式:保存退出文档,以及设置编辑环境

三种模式之间的切换方式

image-20201202215354786

常用命令

△ dd 删除(剪切)光标所在整行内容

△ yy 复制光标所在行整行

△ n 显示搜索命令定位到的下一个字符串

△ N 显示搜索命令定位到的上一个字符串

△ u 撤销上一步操作

△ p 将之前剪切或复制过的数据粘贴到光标后面

末行模式中可用的命令

△ :w 保存

△ :q 退出

△ :q! 强制退出

△ :wq! 强制保存退出

:set nu 显示行号

△ set nonu 不显示行号

△ 命令 执行该命令

△ 整数 跳转到该行

△ s /one /two 替换(将当前光标所在行的第一个one替换成two)

△ s /one /two g 替换(将当前光标所在行的所有one替换成two)

△ %s /one /two g 替换(将全文所有one替换成two)

△ ?字符串 在文本中从下至上搜索该字符串

△ /字符串 在文本中从上至下搜过该字符串

常用快捷键

vim

图源:见图片左下角标注

3.2 编写简单的Shell脚本

什么是Shell

Shell是一个命令行解释器,一个功能强大的编程语言,易编写、易调试,灵活性较强,解释执行的脚本语言,可以直接调用Linux系统命令

Shell脚本命令的工作方式

  • 交互式:用户每输入一条命令就立即执行
  • 批处理:由用户事先编写好一个完整的 Shell 脚本,Shell 会一次性执行脚本中诸多的命令

Shell脚本的执行

编写第一个脚本

#vi hello.sh
#!/bin/bash                   //标示 Shell 脚本;     
#The first Program            //注释        
#Author:Guangran              //注释    
echo -e "Hello Guangran!"     //内容        

执行脚本

  1. 赋予执行权限,然后直接运行
chmod 755 hello.sh
./hello.sh
  1. 通过Bash调用执行脚本
bash hello.sh

多命令执行顺序

  • ; [命令1] ; [命令2] 顺序执行,无逻辑关系
  • && [命令1] && [命令2] 逻辑与
  • || [命令1] || [命令2] 逻辑或

read

释义:接受用户键盘的输入

格式:read [选项] [变量名]

选项:

-P 提示信息

-t 秒数

-n 字符数

-s 隐藏输入的数据

Shell 编程

基础正则表达式

正则表达式用来在文件中匹配符合条件的字符串,包含匹配

字符截取命令

cut(前面有)

awk

格式:awk 条件1{动作1} 条件2{动作2}……

条件:一般使用关系表达式作为条件

x > 10 判断变量是否大于10

x >= 10 判断变量是否大于等于10

x <= 10 判断变量是否小于等于10

动作:格式化输出、流程控制语句

printf

格式:printf [输出类型输出格式] [输出内容]

输出类型:

%ns 输出字符串

%ni 输出整数 <n代表数量>

%m.nf 输出浮点数

输出格式:

\a 警告音

\b 退格

\f 清屏

\n 换行

\r 回车

\t 水平退格(Tab)

\v 垂直退格

条件判断

文件类型进行判断

  • -d 判断文件是否存在(是目录为真)
  • -e 判断文件是否存在(存在为真)
  • -f 判断文件是否存在,并且是否为普通文件(是普通文件为真)

文件权限判断

  • -r 是否可读
  • -w 是否可写
  • -x 是否可执行

文件比较

  • [文件1] -nt [文件2] 1比2新,新为真
  • [文件1] -ot [文件2] 1比2旧,旧为真
  • [文件1] -ef [文件2] 1和2的lnode号是否一致

两个整数之间的比较

  • 1 -eq 2 1是否等于2
  • 1 -ne 2 1是否不等于2
  • 1 -qt 2 1是否大于2
  • 1 -lt 2 1是否小于2
  • 1 -ge 2 1是否等于或小于2
  • 1 -le 2 1是否等于或大于2

字符串的判断

  • -z 为空
  • -n 为非空
  • [字符串1] == [字符串2] 相等
  • [字符串1] != [字符串2] 不相等

多重条件判断

  • [判断1] -a [判断2] 逻辑与
  • [判断1] -o [判断2] 逻辑或
  • ! [判断] 逻辑非

流程控制

if 语句

#单分支 if 条件语句:
if [条件判断式]
    then
        程序 
fi


#双分支 if 条件语句:
if [条件判断式]
    then 
        条件成立执行的程序
    else 
        条件不成立执行的程
fi              
#多分支if条件语句:
if [条件判断1]
    then
        当条件成立,执行程序1 
elif [条件判断2]
    then
        当条件成立,执行程序2
        ……     
    else
        当所有条件不成立,执行此程序    
fi         

case 语句

case $变量名 in
    "值1") 
        如果变量的值等于值1,则执行程序1 
        ;; 
    "值2")
        如果变量的值等于值2,则执行程序2
        ;;
    "值……")
        如果.....
        ;; 
    *)
        如果都不是,则执行此程序          
        ;;
esac

for 循环

#语法一: 
for 变量 in 值1 值2 值3 
    do
        程序
    done

#语法二: 
for (初始值;循环控制条件;变量变化) 
    do
        程序
    done

while 循环与 until 循环

#while 条件成立执行循环
while [条件判断式] 
    do 
        程序 
    done 

#until 条件不成立执行循环
until [条件判断式] 
    do 
        程序 
    done 

THE END