当前位置: 首页 > news >正文

第4章 Vim编辑器与Shell命令脚本

第4章 Vim编辑器与Shell命令脚本

  • 1. Vim文本编辑器
  • 2. 编写Shell脚本
    • 2.2 接收用户的参数
    • 2.3 判断用户的参数
  • 3. 流程控制语句
    • 3.1 if条件测试语句
    • 3.2 for条件循环语句
    • 3.3 while条件循环语句
    • 3.4 case条件测试语句
  • 4. 计划任务服务程序
  • 复习题

1. Vim文本编辑器

Vim编辑器中设置了三种模式——命令模式、末行模式和输入(编辑)模式。在每次运行Vim编辑器时,默认进入命令模式,此时需要先切换到输入模式再进行文档编辑工作。而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。在Vim中,无法直接从输入模式切换到末行模式。
可以使用a、i、o这三个键从命令模式切换到输入模式。其中,a键与i键分别是在光标后面一位和光标当前位置切换到输入模式,而o键则是在光标的下面再创建一个空行。在编写完之后,要想保存并退出,必须先敲击键盘的Esc键从输入模式返回命令模式。然后再输入:wq!切换到末行模式才能完成保存退出操作。

命令模式中最常用的一些命令

命令作用
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
?字符串在文本中从下至上搜索该字符串
/字符串在文本中从上至下搜索该字符串

2. 编写Shell脚本

2.2 接收用户的参数

Linux系统中的Shell脚本内设了用于接收参数的变量,变量之间使用空格间隔。例如,$0对应的是当前Shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值,而$1、$2、$3......则分别对应着第N个位置的参数值。

[root@linuxprobe ~]# vim example.sh
echo "The .sh file name is $0."
echo "There are $# arguments, they are $*."
echo "The first argument is $1, the fifth argument is $5."
[root@linuxprobe ~]# bash example.sh one two three four five six
The .sh file name is example.sh.
There are 6 arguments, they are one two three four five six.
The first argument is one, the fifth argument is five.

2.3 判断用户的参数

Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回非零值。条件测试语法的执行格式为测试语句格式:[ 条件表达式 ]。切记,条件表达式两边均应有一个空格。

文件测试所用的参数

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

可用的整数比较运算符

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

常见的字符串比较运算符

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

3. 流程控制语句

3.1 if条件测试语句

[root@linuxprobe ~]# vim chkscore.sh
#!/bin/bash
read -p "Enter your score (0-100) : " GRADE
if [ $GRADE -gt 100 ] || [ $GRADE -lt 0 ] ; thenecho "$GRADE is error."
elif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; thenecho "$GRADE is excellent."
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; thenecho "$GRADE is pass."
elseecho "$GRADE is fail."
fi

3.2 for条件循环语句

[root@linuxprobe ~]# vim chkhost.sh
#!/bin/bash
HOSTLIST=$(cat~/ipaddrs.txt)
for ip in $HOSTLIST
doping -c 3 -i 0.2 -W 3 $IP &> /dev/nullif [ $? -eq 0 ]then echo "Host $IP is Online."elseecho "Host $IP is Offline."fi
done

3.3 while条件循环语句

[root@linuxprobe ~]# vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "The real price is between 0 and 999, please guess how much the price is."
while true
doread -p "Enter the price you guessed : " INTlet TIMES++if [ $PRICE -eq $INT ] ; thenecho "Congratulations! The real price is $PRICE."echo "You have guessed $TIMES times."exitelif [ $INT -gt $PRICE ] ; thenecho "You guessed too high."elseecho "You guessed too low."fi
done

3.4 case条件测试语句

[root@linuxprobe ~]# vim chkkeys.sh
#!/bin/bash
read -p "Please enter a character and press enter to confirm." KEY
case "$KEY" in[a-z]|[A-Z])echo "You entered a character.";;[0-9])echo "You entered a number.";;*)echo "You entered somethingelse"
esac

4. 计划任务服务程序

at命令中的参数及其作用

参数作用
-f指定包含命令的任务文件
-q指定新任务名称
-l显示待执行任务的列表
-d删除指定的待执行任务
-m任务执行后向用户发邮件

crontab命令中的参数及其作用

参数作用
-e编辑计划任务
-u指定用户名称
-l列出任务列表
-r删除计划任务

使用crond设置任务的参数字段说明

字段说明
分钟取值为0~59的整数
小时取值为0~23的任意整数
日期取值为1~31的任意整数
月份取值为1~12的任意整数
星期取值为0~7的任意整数,其中0与7均为星期日
命令要执行的命令或程序脚本

复习题

  1. Vim编辑器的3种模式分别是什么?
    命令模式、输入模式、末行模式

  2. 怎么从输入模式切换到末行模式?
    先按Esc切换到命令模式,然后按:切换到末行模式

  3. 一个完整的Shell脚本应该包含哪些内容?
    脚本声明、注释信息和可执行语句(命令)

  4. 分别解释Shell脚本中$0与$3变量的作用。
    Shell脚本的名字和第三个参数

  5. if条件测试语句有几种结构,最灵活且最复杂的是哪种结构?
    if条件测试语句包括单分支、双分支与多分支等三种结构,其中多分支结构是最灵活且最复杂的结构,其结构形式为if...then...elif...then...else...fi

  6. for条件循环语句的循环结构是什么样子的?
    for 变量名 in 取值列表 do 命令序列 done

  7. 若在while条件循环语句中使用true作为循环条件,那么会发生什么事情?
    循环不会停止

  8. 如果需要依据用户的输入参数执行不同的操作,最方便的条件测试语句是什么?
    case条件测试语句

  9. Linux系统的长期计划任务所使用的服务是什么,其参数格式是什么?
    长期任务计划需要使用crond服务程序,参数格式是分时日月星期命令

http://www.lryc.cn/news/344692.html

相关文章:

  • javaWeb快速部署到tomcat阿里云服务器
  • [MQTT]Mosquitto的內網連接(intranet)和使用者/密碼權限設置
  • 某盾BLACKBOX逆向关键点
  • 【2024全国青少年信息素养大赛初赛时间以及模拟题】
  • 2024年软件测试最全jmeter做接口压力测试_jmeter接口性能测试_jmeter压测接口(3),【大牛疯狂教学
  • LLM——用于微调预训练大型语言模型(LLM)的GPU内存优化与微调
  • Telnet协议:远程控制的基石
  • 网络工程师必备:静态路由实验指南
  • springboot利用切面保存操作日志(支持Spring表达式语言(简称SpEL))
  • 遂宁专业知识付费系统报价,免费网课平台怎么开通?需要哪些条件?
  • 【linuxC语言】fcntl和ioctl函数
  • java——继承(一)
  • 【Linux】进程间通信方式之管道
  • 【Linux】yum与vim
  • 苍穹外卖Day06笔记
  • Maximo 使用 REST API 创建 Cron Task
  • 【镜像仿真篇】磁盘镜像仿真常见错误
  • 代码随想录算法训练营DAY45|C++动态规划Part7|70.爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数
  • Linux(openEuler、CentOS8)企业内网DHCP服务器搭建(固定Mac获取指定IP)
  • c#读取hex文件方法,相对来说比较清楚
  • 【ytb数据采集器】按关键词批量爬取视频数据,界面软件更适合文科生!
  • 三条命令快速配置Hugging Face
  • Python网络编程 03 实验:FTP详解
  • 个人银行账户管理程序(2)
  • 2024.04.19校招 实习 内推 面经
  • Python并发编程 04 进程与线程基础
  • 模板引擎Freemarker
  • 刷题训练之模拟
  • 视频监控平台:交通运输标准JTT808设备SDK接入源代码函数分享
  • 【C++】多态 — 多态的细节补充(下篇)