一、Vim编辑器

1.1 概念及其作用

用于编写、修改文本,是默认已经安装在Linux上的文本编辑器,类似于windows的Word


1.2 vim的三个工作模式

1)命令模式:Vi/Vim 默认模式,不能输入字符,但是可以控制光标移动,关键词检索,复制,粘贴等基本功能,通过命令模式可以进入末行模式和输入模式

2)末行模式:从命令模式上输入冒号(: )进入,可以对文本进行保存、退出、查找等操作,可通过 Esc 键退回到命令模式

3)输入模式:通过命令模式下键入 a/i/o 进入,输入字符串、文本信息等,可通过 Esc 键退回到命令模式


1.3 vim的编辑保存模块

i

在光标所在位置进行编辑;

a

在光标所在位置后一位进行编辑;

o

在光标所在位置重新启动一行进行编辑;

:w

保存当前编辑本文;

:q

退出当前编辑文本;

:!

强制使用


1.4 vim的搜索替换模块

/string

自顶向下查找;

?string

自底向上查找;

:set nu

显示行号

:set nonu

不显示行号

:noh

不高亮显示

:set ingorecase

开启忽略大小写;

:set noingorecase

关闭忽略大小写;

:[range]s/字符串 A/字符串 B/[参数]

用字符串B替换字符串A

range表示范围:1,4 ----> 第一行至第四行

$ ------> 最后一行

%------> 全文

参数:c ----> 每次替换前进行询问

e ----> 不显示错误信息

g ----> 替换一行中所有匹配项

Vim编辑器-Shell脚本_运维

开启忽略大小写:

Vim编辑器-Shell脚本_Linux_02

把windows替换为Centos(注意windows是小写):

Vim编辑器-Shell脚本_运维_03

交互询问:

Vim编辑器-Shell脚本_运维_04

替换成功:

Vim编辑器-Shell脚本_系统_05


1.5 vim的针对程序员模块

:syntax on

开启语法检查

:set autoindent

自动缩进,默认 8 个空格

:set shiftwidth=4

设置缩进字符

注意:可以通过编辑配置/etc/vimrc 使某些针对程序员的功能自动生效



1.6其他快捷命令

h/j/k/l

控制光标移动(左下上右)

^  

将光标移至行首

$

将光标移至行尾

G

将光标移至文件尾

gg

将光标移至文件头

ctrl + f

向下翻页

ctrl + b

向上翻页

u

撤销操作

x

删除光标所在位置内容

dd

删除光标所在行

D

删除光标所在位置到所在行结尾

yy

复制光标所在行

p

在光标所在位置将复制或删除内容粘贴


二、shell编程入门

2.1 Shell的概念及其作用

Shell 是一款 Linux 系统下,用于用户命令与 Linux 内核连接的软件,是一款命令解释器,能够识别用户输入的各种命令,并传递给操作系统。大多数 Linux 版本默认情况下使用的 Shell 版本是BASH。


2.2 Shell 脚本

Shell 脚本,严格上叫做 BASH 编程, 依赖于 Vim 编辑器,作为文本保存在 Linux 上,一定以.sh结尾Shell 解释器支持变量、命令行参数、交互式输入、函数模块及流控语句等


2.3 Shell 编程

2.3.1分类

1)交互式:用户每输入一条命令,结果显示在屏幕上

2)非交互式:用户每输入一条命令后,结果不显示在屏幕上(输出重定向)

3)批处理:用户编写好完整shell脚本后一次执行


2.3.2执行方式

1)方式1:给脚本加上x权限并以绝对或相对路径+脚本文件执行(因为默认情况所有的命令都是通过PATH寻找命令,不加路径会通过PATH变量查找)

[root@RHEL6 ~]# cat test.sh

seq 3

[root@RHEL6 ~]# ll test.sh

-rw-r--r--. 1 root root 6 May 10 09:10 test.sh

[root@RHEL6 ~]# chmod u+x test.sh //赋予x权限

[root@RHEL6 ~]# ll test.sh

-rwxr--r--. 1 root root 6 May 10 09:10 test.sh

[root@RHEL6 ~]# ./test.sh

1

2

3

2)方式2:使用bash/sh命令+脚本文件(无需x权限)

[root@RHEL6 ~]# chmod u-x test.sh //取消x权限

[root@RHEL6 ~]# ll test.sh

-rw-r--r--. 1 root root 6 May 10 09:10 test.sh

[root@RHEL6 ~]# bash test.sh

1

2

3


2.3.3位置参数

$0

脚本的名称

$n

第n个位置参数

$#

位置参数总个数

$*

所有的位置参数

Vim编辑器-Shell脚本_运维_06

[root@RHEL6 ~]# bash test.sh hello world

This script is test.sh ///$0

The parameter number is 2,they are hello world

The first is hello ///$1

The second is world ///$2


2.4判断用户的参数

1)两种形式:

① test命令:test 参数+表达式

② [ ]命令:[ 表达式1 参数 表达式2 ]

2)结果:

条件成立,返回数字0;不成立,返回(非零)随机数;保存在$?中

2.4.1文件测试

用于判断文件是否存在,并且是什么类型

操作符

作用

-d

测试文件是否为目录类型

-e

测试文件是否存在

-f

判断是否为一般文件

-L

判断是否为链接文件

-r

测试当前用户是否有权限读取

-w

测试当前用户是否有权限写入

-x

测试当前用户是否有权限执行

[root@RHEL6 ~]# ls

anaconda-ks.cfg Downloads Music Templates www.mqzzl.fun

Desktop install.log Pictures test.sh

Documents install.log.syslog Public Videos

[root@RHEL6 ~]# test -f Music/

[root@RHEL6 ~]# echo $?

1

[root@RHEL6 ~]# [ -w test.sh ]

[root@RHEL6 ~]# echo $?

0


2.4.2逻辑测试(与、或、非)

1)”与 &&”:符号两边的表达式同时成立,才是真

[root@RHEL6 ~]# [ -d Music ] && [ -w test.sh ]

[root@RHEL6 ~]# echo $?

0

[root@RHEL6 ~]# [ -e music ] && [ -w test.sh ]

[root@RHEL6 ~]# echo $?

1

2)”或 ||”:符号两边的表达式有一个成立就认为是真

[root@RHEL6 ~]# [ -e music ] || [ -w test.sh ]

[root@RHEL6 ~]# echo $?

0

3)” 非 !”: 对表达式取反

[ $USER != roo ] && echo $USER

root

[root@RHEL6 ~]# echo $?

0


2.4.3 整数值测试(比较大小,不能用 > <和=

操作符

作用

-eq

是否等于

-ne

是否不等于

-gt

是否大于

-lt

是否小于

-le

是否等于或小于

-ge

是否大于或等于

[root@RHEL6 ~]# a=10

[root@RHEL6 ~]# b=100

[root@RHEL6 ~]# if [ $a -lt $b ]; then echo "true"; fi

true


2.4.4字符串测试(比较区别)

操作符

作用

=

比较字符串内容是否相同

!=

比较字符串内容是否不同

-z

判断字符串内容是否为空

[root@RHEL6 ~]# ls

anaconda-ks.cfg Downloads Music Templates www.mqzzl.fun

Desktop install.log Pictures test.sh

Documents install.log.syslog Public Videos

[root@RHEL6 ~]# [ -z $test.sh ]

[root@RHEL6 ~]# echo $?

1

[root@RHEL6 ~]# echo $test.sh

.sh


2.5流程控制语句

2.5.1 if语句--判断语句

1)用于对条件表达式进行判断,执行满足条件表达式的语句

2)语法结构:if-then-fi,if-then-else-fi,if-then-elif-then-else-fi

[root@RHEL6 ~]# cat ping.sh

#!/bin/bash

ping -c 4 -i 0.2 -W 3 $1 &> /dev/null

if [ $? -eq 0 ]

then

echo "Host $1 is online"

else

echo "Host $1 is offline"

fi

[root@RHEL6 ~]# bash ping.sh 192.168.100.1

Host 192.168.100.1 is online

[root@RHEL6 ~]# bash ping.sh 192.168.100.2

Host 192.168.100.2 is offline

-------------------------------------------------------------------------------------

[root@RHEL6 ~]# cat Grade.sh

#!/bin/bash

read -p "Enter your score(0-100):" GRADE

if [ $GRADE -ge 80 ];then

echo "The grade is excellent!!"

elif [ $GRADE -ge 60 ]&&[ $GRADE -lt 80 ];then

echo "The grade is pass"

else

echo "The grade is failure"

fi

[root@RHEL6 ~]# bash Grade.sh

Enter your score(0-100):88

The grade is excellent!!

[root@RHEL6 ~]# bash Grade.sh

Enter your score(0-100):59

The grade is failure


2.5.2 for语句--循环语句

1)根据取值列表,循环执行命令,循环彻底后结束

2)语法结构:

for 变量 in {list}

do

循环体

done

[root@RHEL6 ~]# cat user.txt

tom

jack

lilei

lucy

[root@RHEL6 ~]# cat for.sh

#!/bin/bash

for USER in `cat /root/user.txt`

do

id $USER &> /dev/null

if [ $? -eq 0 ];then

echo "$USER exists"

else

useradd $USER &> /dev/null

echo "1234" | passwd --stdin $USER &> /dev/null

if [ $? -eq 0 ];then

echo "$USER,Create success"

else

echo "$USER,Create failure"

fi

fi

done

[root@RHEL6 ~]# bash for.sh

tom exists

jack,Create success

lilei,Create success

lucy exists


2.5.3 while语句--循环语句

1)用于进行条件判断,当条件不满足时,结束命令!

2)语法结构:

while 表达式

do

循环体

done

[root@RHEL6 ~]# cat while.sh

#!/bin/bash

NUMBER=$(expr $RANDOM % 1000)

TIMES=0

while true

do

read -p "Please input a number(0-999):" INT

let TIMES++

if [ $INT -gt $NUMBER ];then

echo "too big"

elif [ $INT -lt $NUMBER ];then

echo "too small"

else

echo "It is right,the number is $NUMBER"

echo "TIMES=$TIMES"

exit 0

fi

done

Please input a number(0-999):959

too small

Please input a number(0-999):960

It is right,the number is 960

TIMES=2


2.5.4 case语句--判断语句

1)用于对条件表达式进行判断,执行满足条件表达式的语句

2)语法结构:

case 变量 in

条件表达式 1)

语句;;

条件表达式 2)

语句;;

*)

语句;;

esac

[root@RHEL6 ~]# cat case.sh

#!/bin/bash

read -p "Please input a char:" KEY

case $KEY in

[a-z]|[A-Z])

echo "This is a char"

;;

[0-9])

echo "This is a num"

;;

*)

echo "This is a special char"

esac

[root@RHEL6 ~]# bash case.sh

Please input a char:9

This is a num

[root@RHEL6 ~]# bash case.sh

Please input a char:h

This is a char

[root@RHEL6 ~]# bash case.sh

Please input a char:!

This is a special char