Vim与Shell脚本(上)

天涯浪子 提交于 2020-02-27 03:39:29
  • Vim编辑器
  • Shell脚本
  • 流程控制语句
  • 计划任务服务程序

 

 

Vim编辑器

 

1.Vim三种模式

命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作

输入模式:正常的文本录入(也称编辑模式)

末行模式:保存或退出文档,以及设置编辑环境

 

   默认进入文件是在命令模式下, a i o  三个任意键 进入输入模式

o     在光标下一行输入

a     在当前光标下一位输入

i      在当前光标下输入

esc    返回命令模式

 

 

 2. 输入模式下常用的命令

命令

作用

dd

删除(剪切)光标所在整行

5dd

删除(剪切)从光标处开始的5行

yy

复制光标所在整行

5yy

复制从光标处开始的5行

n

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

N

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

u

撤销上一步的操作

p

将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

 

 

3.末行模式中可用的命令

命令

作用

: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

?字符串

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

/字符串

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

 

 

 

4.系统中命令

Vim /tec/hostname         修改主机名

 

最精简的yum仓库配置文件:

[rhel-media] :Yum软件仓库唯一标识符,避免与其他仓库冲突

 

name=linuxprobe:Yum软件仓库的名称描述,易于识别仓库用处

 

baseurl=file:///media/cdrom:提供的方式包括FTP(ftp://..)、HTTP(http://..)、本地(file:///..)

 

enabled=1:设置此源是否可用;1为可用,0为禁用

 

gpgcheck=1:设置此源是否校验文件;1为校验,0为不校验

 

gpgkey=file:///media/cdrom/RPM-GPG-KEY-redhat-release:若上面参数开启校验,那么请指定公钥文件地址。

 

 

 

Shell脚本

 

1.两种模式

交互式(Interactive):用户每输入一条命令就立即执行

批处理(Batch):由用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令

 

 脚本后缀格式   .sh

shell里面的变量可以不加申明

运行原理将很多命令组合起来自动执行

 

2.shell脚本的组成三部分

脚本申明shell声明为bash解释类型  #!/bin/bash

脚本注释(shell解释声明 服务功能的说明解释 #this is a test sw)

脚本命令 (核心的执行命令)

 

install.sh脚本

#!/bin/bash------声明

#this is a nectcloud install tool -----注释

pwd------命令

ll

reboot

 

运行bash install.sh

自动执行pwd  ll   reboot

 

ls 加不同参数为什么能返回不一样的东西

原理:传参匹配执行

因为ls能接收参数,并具备判断语句的能力

 

接收用户参数:

haha.sh

#!/bin/bash

echo “$0”      名称

echo "$#,$*"    个数,列举所有

echo “$1,$3,$5”    xx值是什么

运行bash haha.sh 跟上 a b c d e f,会根据变量条件显示

 

判断用户参数:

按照测试对象来划分,条件测试语句可以分为4种:

文件测试语句

整数值比较语句

字符串比较语句

逻辑测试语句

 

1.文件测试语句

 文件测试所用的参数

操作符

作用

-d

测试文件是否为目录类型

-e

测试文件是否存在无论目录还是文件

-f

判断是否为一般文件

-r

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

-w

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

-x

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

[ -f  /etc/fstab ]   判断是否存在该文件

echo $?     判断上一个语句是否执行成功 返回0则成功  1则失败

 

[ -d  /dev ]   判断是否存在该目录

echo $?     判断上一个语句是否执行成功 返回0则成功  1则失败

 

如何整合两行脚本为一行输出:可用如下参数

逻辑与:&&   如果前面的语句执行成功,则执行后面的语句

逻辑或:||       如果前面的语句执行失败,则执行后面的语句

:

判断当前用户是否是root用户,是则执行显示admin,不是则显示user

$USER 代表当前用户的变量

 [ $USER = root ] && echo "admin" || echo "user"

 

逻辑非:! 取反值,是否不等于

[ ! $USER = root ] && "user" || echo "admin"

判断当前用户是否不是root,不等于则显示user,等于就显示admin

 

2.整数值比较语句

   可用的整数比较运算符

操作符

作用

-eq

是否等于

-ne

是否不等于  不等,为真;相等,为假

-gt

是否大于     大于,为真;否则,为假

-lt

是否小于    小于,为真;否则,为假

-le

等于或小于

-ge

大于或等于

 

[ 5 -gt 10 ]

echo $?

1

 

 例:

Free-m 查看内存  结合shell与整数判断来实现剩余内存小于xxx报警  ($4为第四列  free- m以m为单位)

 

例:[`free -m | grep Mem: | awk '{print$4}'` -lt 1024 ] && echo "Mem bu zu" || echo "hen  zu"

 

实现自动发邮件只需要将上述脚本中的echo "Mem bu zu"后面跟上“ -s "系统监控告警"  | mail xxx@qq.com  (-s 后面为邮件主题)

 

3.字符串比较语句

shell脚本中,使用变量时要先对变量进行判断是否被定义使用

操作符

作用

=

比较字符串内容是否相同

!=

比较字符串内容是否不同

-z

判断字符串内容是否为空值

例:

[ -z  $123 ]

Echo $?

返回1则已经被定义使用   0为未使用

 

 

4.逻辑测试语句

 

 例:

Free-m 查看内存  结合shell与整数判断来实现剩余内存小于xxx报警  ($4为第四列  free- m以m为单位)

 

例:[`free -m | grep Mem: | awk '{print$4}'` -lt 1024 ] && echo "Mem bu zu" || echo "hen  zu"

 

实现自动发邮件只需要将上述脚本中的echo "Mem bu zu"后面跟上“ -s "系统监控告警"  | mail xxx@qq.com  (-s 后面为邮件主题)

 

 

 

 

流程控制语句

      流程控制语句会根据真实的工作需求来调整具体的执行命令,根据某些条件实现自动循环执行

当前介绍 if、for、while、case这4种流程控制语句

 

1.if条件判断语句

    if条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if语句分为单分支结构、双分支结构、多分支结构;其复杂度随着灵活度一起逐级上升

 

 

单分支条件测试语句

if条件语句的单分支结构由if、then、fi关键词组成

如果没有nexus/c9516目录 则去创建

nexus.sh

[root@localhost ~]# more nexus.sh

#!/bin/bash

#cisco nexus 9000 ACI farbic

if [ ! -e  /nexus/c9516 ]

then

mkdir -p /nexus/c9516

fi

 

 

双分支条件测试语句

if条件语句的双分支结构由if、then、else、fi关键词组成

判断某个主机是否在线

test.sh

#!/bin/bash

#ping test

ping -c 3 -i  0.2  -w  3  $1  &> dev/null    将ping测试的信息重定向输出到黑洞文件保持屏幕清爽 

if  [  $?  -eq  0 ]  判断上一条语句如果返回值为0说明在线

then

echo "$1 is on-line"  输出显示在线

else

echo"$1 not is on-line" 输出显示不在线

fi

 

1$为接收到的第一个参数

bash test.sh  192.168.1.1

 

 

多重分支条件测试语句

if条件语句的多分支结构由if、then、else、elif、fi关键词组成

判断输入的数值是ex还是pass还是fali

read 读取参数  赋值给GRADE

test.sh

#!/bin/bash

#cheng ji test

read  -p "Enter : "  GRADE

If  [ $GRADE  -ge 85 ] && [ $GRADE -le 100 ];then

echo "excellent"

elif  [ $GRADE -ge 70 ] && [ $GRADE -le 84 ];then

echo "pass"

else

echo "fail"

fi

else 语句 除了条件包含的以外全都是失败 否定

 

 

2.for条件循环语句

    for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理,当要处理的数据有范围时,使用for循环语句再适合不过了

根据提前创建的txt里的用户名批量创建用户

PASSWD 是一个变量  为了运行脚本的时候输入用户的密码

#!/bin/bash

read -p "Enter is password :" PASSWD

for UNAME in `cat user.txt`

do

id $UNAME $> /dev/null

if [ $? -eq 0 ]

then

echo "Already exitsts"

else

useradd $UNAME &> /dev/null

echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null

if [ $? -eq 0 ]

then

echo "$UNAME , Crete success"

else

echo "$UNAME, Crete fail"

fi

fi

done

 

 

 

批量判断检测ip.txt中的主机是否在线

#!/bin/bas

for IP in `cat ip.txt`

do

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

if [ $? -eq 0 ] ; then

echo "Host $IP is On-line."

else

echo "Host $IP is Off-line."

fi

done

 

 

 

 

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!