Vim编辑器与Shell命令脚本

Posted myxxw2010

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim编辑器与Shell命令脚本相关的知识,希望对你有一定的参考价值。

一、Vim文本编辑器

1、打起精神要牢记

Linux系统中一切都是文件,而配置一个服务就是在修改其配置文件的参数。

2、Vim编辑器的特点

  • Vim全称为Vi Improved,是Vi编辑器的提升版本;
  • 添加了代码着色功能(最大的改进);
  • 某些编程场景下可自动修正错误代码。

3、Vim编辑器的3种模式

  • 命令模式:控制光标,可对文本复制、粘贴、删除和查找等操作。
  • 输入模式:文本录入。
  • 末行模式:保存或退出,设置编辑环境,执行命令等。

《LinuxProbe》—RHCE

4、Vim编辑器常用命令

1)命令模式常用命令

命令

作用

dd

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

5dd

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

yy

复制光标所在整行

5yy

复制从光标处开始的5行

n

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

N

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

u

撤销上一步的操作

p

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

2)末行模式常用命令

命令

作用

: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编辑器配置主机名称、网卡信息和软件仓库

1、配置主机名称

配置文件位置:/etc/hostname

查看主机名:hostname      

如果没有生效需要reboot

2、配置网卡信息

配置文件:/etc/sysconfig/network-scripts/ifcfg-ens160

参数说明:

设备类型:TYPE=Ethernet

地址分配模式:BOOTPROTO=static

网卡名称:NAME=ens160

是否启动:ONBOOT=yes

IP地址:IPADDR=192.168.10.10

子网掩码:NETMASK=255.255.255.0

网关地址:GATEWAY=192.168.10.1

DNS地址:DNS1=192.168.10.1

配置完成后需要重启网络测试是否连通。

nmcli connection reload ens160

3、配置软件仓库

   软件仓库是一种能进一步简化RPM管理软件的难度以及自动分析所需软件包及其依赖关系的技术。

     Yum与DNF软件仓库的配置文件是通用的,填写好配置文件信息后,这两个软件仓库的命令都是可以正常使用。

配置步骤:

第1步:进入/etc/yum.repos.d/目录中(该目录存放软件仓库配置文件)

第2步:用Vim编辑器创建名为rhel8.repo的新配置文件(文件名称可随意,但后缀必须为.repo),逐项写入下面的配置参数并保存退出。

仓库名称:唯一性的标识名称,不应与其他软件仓库发生冲突。

描述信息(name):介绍性的词,易于识别软件仓库的用处。

仓库位置(baseurl):软件包获取方式,可使用FTP或HTTP下载,也可是本地的文件(需要在后面添加file参数)。

是否启用(enabled):设置此源是否可用;1为可用,0为禁用。

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

公钥位置(gpgkey):若上面的参数开启了校验功能,则此处为公钥文件位置。若没有开启,则省略不写。

root@linuxprobe ~]# cd /etc/yum.repos.d/
[root@linuxprobe yum.repos.d]# vim rhel8.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
enabled=1
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
enabled=1
gpgcheck=0

第3步:按配置参数中的仓库位置挂载光盘,并把挂载信息写入/etc/fstab文件中。

[root@linuxprobe yum.repos.d]# mkdir -p /media/cdrom 
[root@linuxprobe yum.repos.d]# mount /dev/cdrom /media/cdrom
mount: /media/cdrom: WARNING: device write-protected, mounted read-only.
[root@linuxprobe yum.repos.d]# vim /etc/fstab
/dev/cdrom /media/cdrom iso9660 defaults 0 0

第4步:使用“dnf install httpd -y”命令检查软件仓库是否已经可用。

[root@linuxprobe ~]# dnf install httpd -y

三、编辑Shell脚本(建议脚本文件使用.sh后缀)

1、Shell脚本的2种工作方式

交互式(Interactive)

用户每输入一条命令就立即执行

批处理(Batch)

编写Shell脚本,Shell一次性执行脚本中诸多的命令

2、Shell脚本的简单组成与执行

第1行

#!

告诉系统使用哪种Shell解释器来执行该脚本

必须存在

第2行

#

注释功能,对脚本作用进行补充说明

建议包含

第3行开始

Linux命令

要Shell执行的一连串命令

必须包含

[root@linuxprobe ~]# vim example.sh
#!/bin/bash
#For Example BY linuxprobe.com
pwd
ls -al

3、执行Shell脚本的2种方式

Bash命令直接运行Shell脚本:bash 脚本名称.sh

,/ 后跟脚本的完整路径(需设置脚本文件权限):./脚本文件.sh

[root@linuxprobe ~]# ./example.sh
bash: ./Example.sh: Permission denied
[root@linuxprobe ~]# chmod u+x example.sh
[root@linuxprobe ~]# ./example.sh

4、Shell脚本支持的参数

$0

当前Shell脚本程序的名称

$#

执行Shell脚本时共传入几个位置参数

$*

列出所有的传入参数

$?

上一次命令的执行返回值。(执行成功返回0,否则返回非0值)

$1、$2、$3.......

分别对应执行Shell脚本时传入的第1个、第2个、第3个、第N个位置参数

《LinuxProbe》—RHCE


5、Shell脚本支持的条件表达式(条件测试语句)

1)条件表达式格式

条件表达式两边均应有一个空格,最外层由[]括起来

《LinuxProbe》—RHCE
2)条件表达式分类

条件表达式

用途

作用

文件测试

判断文件是否存在或权限是否满足等

  • -d  测试文件是否为目录类型
  • -e    测试文件是否存在
  • -f   判断是否为一般文件
  • -r   测试当前用户是否有权限读取
  • -w   测试当前用户是否有权限写入
  • -x    测试当前用户是否有权限执行

逻辑测试

判断条件表达式是否成立

  • &&   逻辑“与”    当前面的命令执行成功后才会执行它后面的命令
  • ||      逻辑“或”    当前面的命令执行失败后才会执行它后面的命令
  • !       逻辑“非”    把条件测试中的判断结果取相反值。也就是说,如果原本测试的结果是正确的,则将其变成错误的;原本测试错误的结果,则将其变成正确的。

整数值比较

仅与整数进行比较,不能与字符串、文件等内容一起操作,也不能使用“=”、“>”、"<“等来判断。因为等号与赋值命令符冲突,大于号和小于号分别与输出重定向命令符和输入重定向命令符冲突

  • -eq 是否等于
  • -ne 是否不等于
  • -gt 是否大于
  • -lt 是否小于
  • -le 是否小于或等于
  • -ge 是否大于或等于

字符串比较

判断测试字符串是否为空值,或两个字符串是否相同。常用来判断某个变量是否未被定义(即内容为空值)。

  • = 比较字符串内容是否相同
  • != 比较字符串内容是否不同
  • -z 判断字符串内容是否为空
3)条件表达式的返回值

返回值

含义

0

条件成立(True)

非零值

条件不成立(False)

4)应用示例-判断当前空闲内存值是否不足
[root@linuxprobe ~]# free -m
total used free shared buff/cache available
Mem: 1966 1374 128 16 463 397
Swap: 2047 66 1981
[root@linuxprobe ~]# free -m | grep Mem:
Mem: 1966 1374 128 16 463 397
[root@linuxprobe ~]# free -m | grep Mem: | awk print $4
128
[root@linuxprobe ~]# FreeMem=`free -m | grep Mem: | awk print $4`
[root@linuxprobe ~]# echo $FreeMem
128
[root@linuxprobe ~]# [ $FreeMem -lt 1024 ] && echo "Insufficient Memory"
Insufficient Memory

四、流程控制语句

1、if条件测试语句

0)if条件测试语句注意事项:
  • if 与 fi必须成对出现
  • if、fi、then、elif、else关键字前后必须用空格进行间隔
  • 当then与if 同行时,if 与 then 间用;间隔
  • else 是最后一种判断条件,其后不能再出现then关键字
1)单分支结构

《LinuxProbe》—RHCE

2)双分支结构

《LinuxProbe》—RHCE

3)多分支结构

《LinuxProbe》—RHCE

4)应用示例——判断分数

#!/bin/bash
read -p "Enter your score(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; then
echo "$GRADE is Excellent"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; then
echo "$GRADE is Pass"
else
echo "$GRADE is Fail"
fi

2、for循环

0)注意事项

for 与 in 搭配使用

for 与 do done 搭配使用(do与done成对出现)

1)for循环格式:

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。

《LinuxProbe》—RHCE

2)应用示例——批量创建用户
  • /dev/null是一个被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据(类似于没有回收功能的垃圾箱),可以让用户的屏幕窗口保持简洁。
vim users.txt
andy
barry
carl
duke
eric
george
vim addusers.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Already exists"
else
useradd $UNAME
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
echo "$UNAME , Create success"
fi
done
bash addusers.sh
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success

tail -6 /etc/passwd
andy:x:1001:1001::/home/andy:/bin/bash
barry:x:1002:1002::/home/barry:/bin/bash
carl:x:1003:1003::/home/carl:/bin/bash
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash

3、while循环

1)while循环注意事项
  • while循环通过判断条件的真假来决定是否继续执行命令,条件为真就继续执行,为假就结束循环。
  • 根据条件重复执行命令
  • 执行前并不确定最终执行的次数
  • do与done成对出现

《LinuxProbe》—RHCE

2)应用示例——猜数字

提示:

获得随机数字 :使用$RANDOM变量来调取出一个随机的数值(范围为0~32767),并将其对1000进行取余操作,同时使用expr命令取得其结果。

获取用户输入:通过read读取用户的键盘输入值。

vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "商品实际价格为0-999之间,猜猜看是多少?"
while true
do
read -p "请输入您猜测的价格数目:" INT
let TIMES++
if [ $INT -eq $PRICE ] ; then
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"
exit
elif [ $INT -gt $PRICE ] ; then
echo "太高了!"
else
echo "太低了!"
fi
done

4、case条件测试语句

1)case 注意事项

case语句是在多个范围内匹配数据,若匹配成功则执行相关命令并结束整个条件测试;如果数据不在所列出的范围内,则会去执行星号(*)中所定义的默认命令。

《LinuxProbe》—RHCE

2)应用示例——判断用户输入类型
vim Checkkeys.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母。"
;;
[0-9])
echo "您输入的是 数字。"
;;
*)
echo "您输入的是 空格、功能键或其他控制字符。"
esac

五、计划任务服务程序

1、计划任务分类

一次性计划任务:执行1次就结束。(如:今晚23:30重启网站服务。)

周期性计划任务:重复执行。(如:每周一凌晨3:25把/home/wwwroot目录备份为backup.tar.gz)

2、单次计划任务(at  时间)

1)注意事项
  • 使用ctrl + d 键来结束计划任务的编辑
  • 可使用atrm 计划任务编号 来删除某条计划任务
2) at命令的参数及其作用

参数

作用

-f

指定包含命令的任务文件

-q

指定新任务名称

-l

显示待执行任务列表

-d

删除指定待执行任务

-m

Vim编辑器与Shell命令脚本

vim编辑器与shell命令脚本

vim编辑器与shell命令脚本

Vim编辑器与Shell命令脚本

续写vim,shell脚本基础编辑,read命令,if与case判断语句,文件查找方式,压缩与解压,

第五次课

(c)2006-2024 SYSTEM All Rights Reserved IT常识