Vim编辑器与Shell脚本

Vim编辑器和Shell脚本

Vim的三种模式

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

命令模式中常用的命令

dd 删除(剪切)光标所在整行
5dd 删除(剪切)从光标开始的第5行
yy 复制光标所在整行
5yy 复制光标处开始的第5行
n 搜索命令定位到的下一个字符串
N 搜索命令定位到的上一个字符串
u 撤销上一步的操作
p 将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

末行模式中可用的命令

: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编辑器中默认使用的是命令模式,可使用a、i、o三个键从命令模式切换到输入模式。:切换到末行模式。
在输出模式下,切换其他模式,需要先按Esc,在进行命令切换。

配置主机名称

主机名所在位置 /etc/hostname

ji@ji-virtual-machine:~$ vim /etc/hostname

配置网卡信息

网卡配置文件所在地:
ubuntu的网卡配置未知
应该在etc文件夹之下把

待补

配置Yum软件仓库

# ubuntu并不支持.的写法
ji@ji-virtual-machine:~$ cd /etc.yum.repos.d
bash: cd: /etc.yum.repos.d: 没有那个文件或目录

### 具体vim编写内容
[rhe17] # Yum软件仓库唯一标识
name=rhe17# Yum软件仓库的名称描述,易于识别仓库用处
baseurl=file://media//cdrom # 提供的方式包括http,ftp,file(本地)
enabled=1 # 设置此源是否可用,1为可用,0为禁用
gpgcheck=0 # 设置此源是否为校验文件,1为校验,0为不校验。
## 具体代码
root@ji-virtual-machine:/etc/yum/repos.d# vim rhel7.repo
root@ji-virtual-machine:/etc/yum/repos.d# mkdir -p /media/cdrom
root@ji-virtual-machine:/etc/yum/repos.d# mount /dev/cdrom /media/cdrom
mount:块设备 /dev/sr0 写保护,将以只读方式挂载
root@ji-virtual-machine:/etc/yum/repos.d# vim /etc/fstab # 这里我并不会设置
root@ji-virtual-machine:/etc/yum/repos.d# yum install httpd
file://media//cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file://media//cdrom/repodata/repomd.xml
尝试其他镜像。
错误:Cannot retrieve repository metadata (repomd.xml) for repository: rhe17. Please verify its path and try again
root@ji-virtual-machine:/etc/yum/repos.d# 

编写Shell脚本

两种工作模式:
交互式和批处理。

shell使用Bash错位命令行终端解释器

root@ji-virtual-machine:/etc/yum/repos.d# echo $SHELL
/bin/bash

编写shell脚本

.sh文件就是该脚本文件,可用vim编写
简单例子:
查看当前所在工作路径并列出当前目录下所有的文件及属性信息
vim example.sh

#!是脚本申明
# 是脚本注释
#!/bin/bash
pwd
ls -al
# 执行脚本
root@ji-virtual-machine:/etc/yum/repos.d# bash example.sh
/etc/yum/repos.d
总用量 20
drwxr-xr-x 2 root root 4096 12月  1 16:41 .
drwxr-xr-x 3 root root 4096  4月 17  2021 ..
-rw-r--r-- 1 root root   23 12月  1 16:41 example.sh
-rw-r--r-- 1 root root   69 12月  1 16:28 rhe17.repo
-rw-r--r-- 1 root root   69 12月  1 16:30 rhel7.rep

另外一种执行的方法

输出完整的路径来执行

root@ji-virtual-machine:/etc/yum/repos.d# ./example.sh
bash: ./example.sh: 权限不够

但经常权限不够,可以为该文件增加执行权限,下一章中有说为文件增加权限

接收用户的参数

$0对应当前shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有未知的参数值,$?对应的是吓死你hi上一次命令的执行返回值。$1 $2分别对应着第N个未知的参数值

# 编写参数是这样,但输出不来
echo"fengexian=======fengeixan"
echo"This is $0"
echo"all $# ,they ary $*"
echo "The first is $1 ,Second is $6"
#执行命令语句;用bash或sh都是如此
root@ji-virtual-machine:/etc/yum/repos.d# sh example.sh one three
example.sh: 4: example.sh: echofengexian=======fengeixan: not found
example.sh: 5: example.sh: echoThis is example.sh: not found
example.sh: 6: example.sh: echoall 2 ,they ary one three: not found
The first is one ,Second is 

判断用户的参数

测试语句格式:[ 条件表达式 ] []内两边有空格
按测试对象划分:
文件测试语句
逻辑测试语句
整数值比较语句
字符串比较语句

文件测试所用的参数

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

例子

# -d的返回值为0的话则目录存在,为1的话不存在
root@ji-virtual-machine:/etc# [ -d etc/fastdb ] 
# Shell解释器的内设$?变量显示上一条命令执行后的返回值
root@ji-virtual-machine:/etc# echo $?
1
# -f的话同样如此,作用在文件上

逻辑语句对测试结果进行逻辑分析

&&的话就是前面成功才会执行后面,同样,判断时候若前面为False,则后面不用看了。
逻辑或||
逻辑非!

可用的整数比较运算符

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

例子

root@ji-virtual-machine:~# [ 10 -gt 10 ]
root@ji-virtual-machine:~# echo $?
1
root@ji-virtual-machine:~# [ 10 -et 10 ]
bash: [: -et: 期待二元表达式
root@ji-virtual-machine:~# [ 10 -gt 10 ]
root@ji-virtual-machine:~# echo $?
1

实例查看当前内存剩余量

free -m

常见的字符串比较运算符

=等于
!=不等于
-z 判断字符串内容是否为空

实例判断当前语系的环境变量

root@ji-virtual-machine:~# echo $LANG
zh_CN.UTF-8
root@ji-virtual-machine:~# [ $LANG!="en.US" ]&& echo "NOt en.US"
NOt en.US

流程控制语句

if条件测试语句

echo "please input your age:"
read age
if ["$age"-gt"20"];then # 将输入的年龄与20作对比
  echo "age is more than 20"
else
  echo "age is less than 20"
fi

for循环语句

for loop in 1 2 3 4 5 6 # 使用for循环输出in后面的数字
do
  echo "The value is:$loop" # 输出数字
done

while条件循环语句

int=1 # 初始化变量
while(($int<=5)) # 判断变量的取值范围
do
  echo $int
  let "int++" # 变量迭代
done

case条件测试语句

read -p "press some key,then press return:" KEY
case $KEY in # case语句后必须有in,每一个模式必须以右括号结束")" 
[a-z]|[A|Z])
echo "It's a letter."
;;# 命令序列结束
[0-9])Q
echo "It's a digit."
;;
*)# 表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行"*)"后的命令序列
echo "It's function keys、Spacebar or other ksys."
esac

计划任务服务程序

计划任务分为一次性计划任务

只执行一次,使用”at 时间“形式就可以
查看计划任务,未执行的"at -l"
删除,可以用" atrm 任务序号"
使用"at xx"命令终端默认都是采用交互式方法

root@ji-virtual-machine:~# at 23:30
warning: commands will be executed using /bin/sh
at> echo "hello world"
at> <EOT>
job 1 at Wed Dec  1 23:30:00 2021
root@ji-virtual-machine:~# at -l
1	Wed Dec  1 23:30:00 2021 a root
# 删除任务
root@ji-virtual-machine:~# atrm 1

长期性计划任务

使用crond服务(linux默认启用),
查看 “crontab -l”
删除 " crontab -r"
管理员登陆的话,可以使用-u参数来编辑他人的计划任务
分时日月星期
crond设置任务的参数字段说明

分 0~59
时 0~23
日 1~31
月 1~12
星期 0~7的任意整数,其中0与7均为星期日

例子
corontab -e创建计划任务
可我进入之后就退不出来了;有可能后面没加执行命令的路径。

root@ji-virtual-machine:~# crontab -e
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 1
888

分时日月星期用空格隔开
但是可以用逗号表示多个时间段,可以用减号表示一段连续的时间(12-15可用来表示每月的12-15号)
用除号(/)表示执行任务的间隔时间(*/2表示每隔2分钟执行)
在计划任务时,命令路径需以绝对路径来写,whereis查看路径。
tips笔记:linux就该这样学

posted @ 2021-12-01 17:42  索匣  阅读(248)  评论(0编辑  收藏  举报