Vim编辑器与Shell命令脚本 您所在的位置:网站首页 脚本mv后的文件为什么没了 Vim编辑器与Shell命令脚本

Vim编辑器与Shell命令脚本

2024-07-12 00:33| 来源: 网络整理| 查看: 265

学习总览

Vim文本编辑器编写Shell脚本流程控制语句计划任务服务程序 Vim文本编辑器

Vim的三种模式

命令模式:控制光标,增强对文本的复制、粘贴、删除和查找功能。编辑模式:文本录入。末行模式:保存或退出,设置编辑环境。

三种模式的切换如下图:

Vim模式切换

默认进入的就是命令模式,命令模式下的常用命令如下:

命令作用dd删除(剪切)光标所在整行yy复制光标所在整行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?字符串在文本中从下至上搜索该字符串/字符串在文本中从上至下搜索该字符串 编写Shell脚本

Shell终端解释器可以看做人与计算机硬件之间的“翻译官”,它作为用户与 Linux系统内部的通信媒介,除了能够支持各种变量与参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。

Shell脚本命令的工作方式有两种:

交互式:用户每输入一条命令立即执行;批处理:用户事先编写好一个完整的Shell脚本,Shell一次性执行其中的所有命令。 编写一个简单的Shell脚本

执行如下命令:

# 用Vim文本编辑器,新建一个learnshell1.sh文件 vim learnshell1.sh # 定义其内容如下: #!/bin/bash # this is a shell script pwd ls -a -l # 保存退出后,执行该脚本的两种方式 # 方式一:直接bash解释器执行该脚本 bash learnshell1.sh # 方式二:先授权,再执行该脚本 chmod u+x learnshell1.sh ./learnshell1.sh

该命令的效果图如下:

执行简单脚本

注意:脚本的第一行必须是(#!/bin/bash),声明这是一个脚本文件。

Shell脚本是如何接收参数的

执行如下命令:

# 用Vim文本编辑器,新建一个learnshell2.sh文件 vim learnshell2.sh # 定义其内容如下: #!/bin/bash # this is a shell script to learn how to use variable echo "当前脚步名称为$0" echo "总共传进来的变量个数为$#。" echo "它们分别是$*。" echo "第二个变量为$2,第五个变量为$5。" # 保存退出后,通过如下方式执行脚本 bash learnshell2.sh one two three four five six

该命令的效果图如下:

脚本使用参数

通过效果图,可以看出:$n,就是脚本获取命令中输入的第n个参数。$0即第0个参数就是脚本的名称,$#是获取命令中有多少个参数,$*是一次性获取所有的参数。

判断用户输入的参数

Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。按测试对象可以分为:

文件测试语句逻辑测试语句整数值比较语句字符串比较语句 文件测试语句

文件测试语句可使用的参数如下:

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

测试用的命令如下:

# 测试(/home/learnCSPP)是否为目录 [ -d /home/learnCSPP ] echo $? # 测试(/home/learnCSPP/hello)是否为普通文件 [ -f /home/learnCSPP/hello ] echo $? # 测试(/home/learnCSPP/learnshell1.sh)是否为普通文件 [ -f /home/learnCSPP/learnshell1.sh ] echo $? # 测试(/home/learnCSPP/hello)是否有写入权限 [ -w /home/learnCSPP/hello ] echo $? # 测试(/home/learnCSPP/learnshell2.sh)是否有执行权限 [ -x /home/learnCSPP/learnshell2.sh ] echo $? # 测试(/home/learnCSPP/test)是否为目录 [ -d /home/learnCSPP/test ] echo $?

该命令的效果如下:

文件测试

逻辑测试语句

逻辑语句用于对测试结果进行逻辑分析,根据测试结果可实现不同的效果。逻辑“与”的运算符号是&&,它表示当前面的命令执行成功后才会执行它后面的命令;逻辑“或”的运算符号是||,它表示当前面的命令执行失败后才会执行它后面的命令;逻辑“非”的运算符号是!,把条件测试中的判断结果取相反值。

测试用的命令如下:

# 如果hello是一个可执行文件,就在终端打印echo中的内容 [ -x hello ] && echo "hello 是一个可执行文件" # 如果test是一个目录,就在终端打印echo中的内容 [ -d test ] && echo "test 不是一个目录" # 如果test不是一个目录,就在终端打印echo中的内容 [ -d test ] || echo "test 不是一个目录" # 如果test不是一个目录,就在终端打印echo中的内容 [ ! -d test ] && echo "一个结果为错误的命令,逻辑非后,即该命令是正确的。所以紧随其后逻辑与的命令会执行"

该命令的效果如下:

逻辑语句

整数值比较语句

可用的整数比较符号如下:

运算符作用-eq是否等于-ne是否不等于-gt是否大于-lt是否小于-le是否等于或小于-ge是否大于或等于

测试用的命令如下:

# 如果参数1(10)等于参数2(10)为真,就在终端打印echo后的内容 [ 10 -eq 10 ] && echo "10等于10" # 如果参数1(10)大于参数2(10)为真,就在终端打印echo后的内容 [ 10 -gt 8 ] && echo "10大于8" # 如果参数1(10)小于参数2(8)为假,就在终端打印echo后的内容 [ 10 -lt 8 ] || echo "10小于8"

该命令的效果如下:

整数值比较

字符串比较语句

常见的字符串比较运算符如下:

运算符作用=比较字符串是否相同!=比较字符串是否不同-z判断字符串是否为空

测试用的命令如下:

# 定义了变量STR,其值为abc STR="abc" # 如果变量STR的值为abc,就在终端打印echo后的内容 [ $STR = "abc" ] && echo "变量STR的值为abc" # 如果变量STR的值不为cba,就在终端打印echo后的内容 [ $STR = "cba" ] || echo "变量STR的值为cba" # 如果变量STR不为空,就在终端打印echo后的内容 [ -z $STR ] || echo "变量STR不为空"

该命令的效果如下:

字符串比较

流程控制语句

流程控制语句有4种:if,for,while,case

if条件测试语句

if条件测试语句的格式为:if [ 判定条件 ] then 命令语句 fi,可以解释为如果判定条件为真,则执行命令语句。

测试用的命令如下:

# 新建一个learnif文件 vim learnif.sh #编辑其内容如下: #!/bin/bash # this is a shell script to learn how to use if. if [ $1 -ge 90 ] then echo "大于或等于90,所以是优秀" elif [ $1 -ge 70 ] then echo "在70-90之间,所以是良好" elif [ $1 -ge 60 ] then echo "在60-70之间,所以是及格" else echo "小于60,所以是不及格" fi # 保存退出后,可以用类似如下命令进行测试: bash learnif.sh 95

该命令的效果如下:

流程控制-if语句

for条件循环语句

for条件循环语句的格式为:for 变量名 in 取值列表 do 命令($获取当前循环变量的值) done。详情见测试案例。

测试用的命令如下:

# 新建一个user.txt的文本 vim user.txt # 编辑其文本如下: andy barry carl duke eric george # 保存退出后,新建一个learnfor.sh的文本 vim learnfor.sh # 编辑其文本如下: #!/bin/bash # This is s shell script to learn how to use for. echo "users.txt中的内容如下:" for UNAME in `cat users.txt` do echo "$UNAME" done read -p "您输入一个用户,系统检测你输入的用户是否在user.txt中: " INPUT FLAG=1 for UNAME in `cat users.txt` do if [ $UNAME = $INPUT ] then FLAG=0 echo "你输入的是$INPUT,在user.txt中" fi done if [ $FLAG -eq 1 ] then echo "你输入的$INPUT,不在user.txt中" fi # 通过如下命令测试(键入carl、text可看到不同的输出) bash learnfor.sh

该命令的效果如下:

流程控制-for语句

while条件循环语句

while条件循环语句格式:while 判定条件 do 命令 done,详情见案例。

测试命令如下:

# 新建一个learnwhile.sh的文本 vim learnwhile.sh #编辑其文本如下: #!/bin/bash # 这是一个猜数字游戏,用来学习while语句用法 echo "你将要猜的是一个0-999的数字,系统会记录你直至猜中的轮次数。" NUM=$(expr $RANDOM % 1000) TIMES=0 while true do read -p "请输入你猜的数字: " GUESS let TIMES++ if [ $NUM -eq $GUESS ] then echo "恭喜您猜中了,您只猜了$TIMES轮就猜中了" exit 0 elif [ $NUM -gt $GUESS ] then echo "太小了,需要一个更大的数字" else echo "太大了,需要一个更小的数字" fi done # 通过该命令运行该脚本(用0-999中的数字测试) bash learnwhile.sh

该命令的效果如下:

流程控制-while语句

case条件测试语句

case语句的格式如下:*case 变量值 in 范围1) 命令1 ;; … ) 命令n+1 ;; esac,详情见案例。

测试用的命令如下:

# 新建一个learncase.sh的文本 vim learncase.sh # 编辑其内容如下: #!/bin/bash # 这是一个用来学习case语法的案例 read -p "请您在输入一个字符: " CHAR case $CHAR in [0-9]) echo "你输入的是一个数字" ;; [a-z]|[A-Z]) echo "你输入的是一个英文字母" ;; *) echo "你输入的是其他的特殊字符" ;; esac # 通过如下命令运行该脚本,并测试 bash learncase.sh

该命令的效果如下:

流程控制-case语句

计划任务服务程序

计划任务,可以分为一次性任务和定时任务。

一次性任务

一次任务是通过at的服务实现的。

# 通过yum命令安装at工具 yum install at # 启动atd服务 systemctl start atd.service # 查看现在有多少个一次性定时任务 at -l # 删除还未执行的一次性定时任务 atrm $id # 设定在16:28创建目录learnAt at 16:28 at> mkdir learnAt # CTRL + D组合建退出一次性定时任务的设置

该命令的效果图如下:

计划任务-一次性

定时任务

默认启用的crond服务,可以实现定时任务。定义定时任务的格式为: 分 时 日 月 星期 命令。如果不需要限制,用*作为代替进行占位。

这里的分、时、日、月、星期对应的范围如下:

字段含义分0-59的整数时0-23的整数日0-31的整数月1-12的整数星期0-7,0和7都是星期天

crond服务相关的命令如下:

crontab -e 创建或编辑定时任务crontab -l 列出当前用户设置的定时任务crontab -r 删除选中的定时任务

现在做一个定时任务:每隔一分钟向文件(/home/learnCSPP/learnschedule)中追加当前时间,详情见命令如下:

# 看crond服务是否处于运行状态,如果不是的话,需要启动 systemctl status crond.service # 预先创建存日期的目标文件 touch /home/learnCSPP/learnschedule # 查看当前的计划定时任务 crontab -l # 编辑计划定时任务 crontab -e # 编辑如下(即每隔一分钟向/home/learnCSPP/learnschedule追加当前时间) * * * * * date >> /home/learnCSPP/learnschedule # 保存退出后,隔几分钟后看/home/learnCSPP/learnschedule的内容 cat /home/learnCSPP/learnschedule # 通过以下命令可以删除定时任务 crontab -r

以上命令的实际效果图如下:

计划任务-定时执行



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有