Sy6 编辑器vi的应用(+shell脚本3例子)

实验环境:

宿主机为win11,网络:10.255.50.5 6389

WSL2 ubuntu

目标机的OS:Ubuntu 内核、版本如下:

linux@peggy0223:/$ uname -r

5.15.146.1-microsoft-standard-WSL2

linux@peggy0223:/$ cat /proc/version

Linux version 5.15.146.1-microsoft-standard-WSL2 (root@65c757a075e2) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Jan 11 04:09:03 UTC 2024

实验6 编辑器 vi的应用

1.实验目的

  1. 掌握编辑器vi的基本用法。
  2. 练习编写简单的shell程序。

2.vi的常用命令

操作命令简介:

Ctrl+D:窗口向下移动半屏。

Ctrl+U:窗口向上移动半屏。

Ctrl+F:翻至前一屏。

Ctrl+B:翻至后一屏。

k(或个):光标上移一行。

j(或!):光标下移一行。

1(或→):光标右移一行。

h(或一):光标左移一行。

Enter:光标移到下一行的开始。

-(减号):光标移到前一行的开始。

W:光标移到下一词的前端。

B:光标移到前一词的前端。

~或0(零):光标移到当前行的前端。

$:光标移到当前行的后端。

A:在光标后立即插入文本。

0:当前行后紧接着开辟一新行。

0(大写字母O):当前行前紧接着开辟一新行。

X:删除光标下的字符。

ndw:删除光标所在词及其后面的n-1个词(包括词后的空格)。D:从光标处删除到行未。

d:从光标处删除到行开始。

ndd:删除光标所在行及其后的n-1行。

U:取消前一次变更。

/字符串:查找字符串。

:w;存盘。

:q:不存盘退出。

:q!:强行退出。

:wq:存盘退出。

:help:显示帮助信息。

:set number:显示行号。

3.实验内容

  1. 复制/ete/passwd文件到自己的目录下。
  2. 用vi操作命令练习编辑复制后的passwd文件。
  3. 用vi操作命令练习编辑以下shell文件:

①大九九乘法表;

②小九九乘法表;

③交互式成批添加用户。

4.实验报告

以书面形式记录下每一个实验内容、编写的源程序,说明程序调试中遇到的问题和解决方法。

5. 思考题

  1. 编辑器vi有几种工作模式?
  2. 说明实现成批添加用户的原理?

实验记录:

ps注意,脚本文件建议以sh后缀名结尾,这样vi等编辑器会自动识别一些命令和字符,若是使用txt或者无后缀名则不会有提示(vi下是不同颜色提示和成对的符号匹配)。

S1、

 

在Linux环境下,我们可以使用vi/vim编辑器来创建并编写一个简单的shell脚本,该脚本可以输出大九九乘法表。以下是具体步骤:

当然,这里是一个使用Bash shell脚本实现九九乘法表的简单例子,采用嵌套循环:

```bash

#!/bin/bash

# 使用嵌套for循环

for ((i=1; i<=19; i++))

do

    for ((j=1; j<=i; j++))

    do

        # 计算乘积并格式化输出

        result=$((i*j))

        printf "%2d * %2d = %2d\t" $j $i $result

    done

    # 结束一行后换行

    echo

done

```

当你运行这个脚本时,它会按照九九乘法表的形式逐行打印出1到9的乘法运算结果。`printf`命令在这里用于格式化输出,`%2d` 表示至少占两位宽度的整数,`%2d * %2d = %2d\t` 是指每部分都至少占用两位,且末尾跟随一个制表符用于列对齐。每完成一行内部循环后,外部循环的`echo`命令将打印一个新行,从而实现乘法表的结构布局。

这样你就成功使用vi编辑器创建并运行了一个能输出大九九乘法表的shell脚本了。

S2、

基于上述信息,我们可以给出一个简单的Bash shell脚本来实现九九乘法表。以下是脚本的一个示例:

```bash

#!/bin/bash

# 方法一:使用两个嵌套的for循环

for ((i=1; i<=9; i++))

do

    for ((j=1; j<=i; j++))

    do

        # 使用let命令进行乘法计算,并用echo -n输出不换行的结果

        let result=i*j

        echo -n "$i*$j=$result\t"

    done

    # 在每行结束后输出一个换行符

    echo

done

```

当你保存这个脚本到一个名为`multiplication_table.sh`的文件中,并赋予它执行权限后(例如:`chmod +x multiplication_table.sh`),可以通过运行`./multiplication_table.sh`来执行它,将会得到以下输出:

```

1*1=1        

1*2=2        2*2=4        

1*3=3        2*3=6        3*3=9        

1*4=4        2*4=8        3*4=12        4*4=16        

...

9*8=72        9*9=81        

```

这个脚本利用了两层for循环,外层循环变量`i`从1遍历到9,内层循环变量`j`也从1开始但不超过`i`,这样可以确保每一行只打印出从1到当前行数的乘积。每次计算结果后,用`echo -n`命令不换行地输出结果,并在每个结果后面加上制表符`\t`用于对齐。当内层循环结束时,外层循环的`echo`命令会输出一个换行符,从而形成新的一行。

S3、

以下是一个简单的Shell脚本示例,用于交互式地批量添加用户。在这个脚本中,它会循环询问用户输入用户名和密码,直到用户不再想添加更多用户为止。

```bash

#!/bin/bash

while true

do

    echo "请输入要创建的用户名(或按q退出):"

    read username

    # 如果输入q,则退出循环

    if [ "$username" = "q" ]; then

        break

    fi

    # 提示输入用户密码

    echo "请输入用户的密码:"

    read -s password

    echo ""

    # 创建新用户并设置密码

    useradd $username

    echo "$password" | passwd --stdin $username   #ubuntu2204passwd不支持--stdin选项

    echo "$password" | sudo chpasswd username    #替代选项命令!已经验证ok

    # 检查添加用户是否成功

    if [ $? -eq 0 ]; then

        echo "用户 '$username' 已成功创建。"

    else

        echo "创建用户 '$username' 失败,请检查输入或系统权限。"

    fi

    echo ""

done

echo "已结束添加用户。"

```

**注意**:

- 此脚本需要在具有相应权限的环境中运行,因为`useradd`和`passwd`命令通常需要root权限。

- 密码输入时,使用了`-s`选项使passwd命令在读取密码时不显示输入内容。

- `echo "$password" | passwd --stdin $username`这条命令将密码通过管道传递给passwd命令,以非交互方式设置密码。

- 使用`$?`来获取上一条命令(在这里是`useradd`或`passwd`)的退出状态,如果为0则表示命令执行成功。

Ps,清空文本文件或者脚本文件方法:

第一种使用 > filename ;

第二种使用 cat /dev/null  > filename ;

第三种使用 echo “” > filename ;这种是出现一个空格行效果。

分别如下:

第四种使用 truncate -s 0 filename.txt ;

truncate是一个专门用来截断文件的命令,它可以将文件截断到指定长度,如果指定长度为0,则可以清空文件内容。

第五种使用 dd if=/dev/null of=filename.txt

dd命令是一个非常强大的命令,它可以用来复制文件、转换文件格式等操作,但是它也可以用来清空一个文件。

如下操作:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/296148.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware创建Ubuntu虚拟机详细教程

下载ISO映像文件 进入官网下载&#xff1a;Download Ubuntu Desktop | Download | Ubuntu 下面是一些其他的下载路径&#xff1a; 中国官网 https://cn.ubuntu.com/ 中科大源 Index of /ubuntu-releases/ (ustc.edu.cn) 阿里云开源镜像站 ubuntu-releases安装包下载_开源镜像…

真·面试题总结——JVM虚拟机

JVM虚拟机 JVM虚拟机规范与实现 JVM虚拟机规范 JVM虚拟机实现 JVM的常见实现 JVM虚拟机物理架构 JVM虚拟机的运转流程 JVM类加载过程 JVM类加载器及类加载器类型 JVM类加载器双亲委派机制 JVM运行时数据区的内存模型 JVM运行时数据区的内存模型&#xff1a;程序计数器…

day08 java 静态方法调用 方法的内存实现机制

目录 静态方法调用 方法的内存实现 静态方法调用 静态方法&#xff1a; 静态方法要在方法上用修饰符static。 静态方法可以通过类名调用 &#xff1a;类名.方法名&#xff08;&#xff09;或者 直接调用 &#xff1a;方法名&#xff08;&#xff09; 在同一个类中时&#xf…

网工内推 | 国企运维,IA认证,大专以上即可,最高22K

01 深圳建广数字科技有限公司青岛分公司 招聘岗位&#xff1a;桌面运维工程师 职责描述&#xff1a; 1.根据运维服务请求完成关于操作系统、应用软件、办公设备、网络等方面的安装、管理与维护&#xff1b; 2.各种PC软硬件故障诊断、排查及升级&#xff1b; 3.桌面设备&…

自动化测试如何管理测试数据

前段时间&#xff0c;知识星球里有同学问到&#xff1a;自动化case越多&#xff0c;测试数据越多&#xff0c;数据的管理成本也越来越高&#xff0c;是否需要一个数据池来专门管理测试数据&#xff1f;这是一个好问题&#xff0c;也是很多测试同学在自动化测试实践中必须面对的…

新手使用GIT上传本地项目到Github(个人笔记)

亲测下面的文章很有用处。 1. 初次使用git上传代码到github远程仓库 - 知乎 (zhihu.com) 2. 使用Git时出现refusing to merge unrelated histories的解决办法 - 知乎

Lua环境下载与配置

这里介绍如何下载已经编译好的Lua环境&#xff0c;如何配置Lua环境。 如希望自己从源码编译Lua环境&#xff0c;请自行搜索资料。 第一步&#xff1a;下载编译好的lua环境 打开下面链接&#xff0c;然后根据指引下载。 The Programming Language Luahttps://www.lua.org/hom…

【论文极速读】 指令微调BLIP:一种对指令微调敏感的Q-Former设计

【论文极速读】 指令微调BLIP&#xff1a;一种对指令微调敏感的Q-Former设计 FesianXu 20240330 at Tencent WeChat search team 前言 之前笔者在[1]中曾经介绍过BLIP2&#xff0c;其采用Q-Former的方式融合了多模态视觉信息和LLM&#xff0c;本文作者想要简单介绍一个在BLIP2…

docker 安装nginx

一、先查看有没有nginx镜像 docker images 二、发现没有nginx镜像&#xff0c;下载最新镜像 docker pull nginx 三、运行镜像 为了先复制出部分文件&#xff0c;先启动一个临时容器 docker run --name nginx -p 9001:80 -d nginx docker cp nginx:/etc/nginx/conf.d /home/…

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f; HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接改善了短连接造成的性能开销。支持管道网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&#xff0c…

百卓Smart管理平台 importexport.php SQL注入漏洞复现(CVE-2024-27718)

0x01 产品简介 百卓Smart管理平台是北京百卓网络技术有限公司(以下简称百卓网络)的一款安全网关产品,是一家致力于构建下一代安全互联网的高科技企业。 0x02 漏洞概述 百卓Smart管理平台 importexport.php 接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取数据…

基于springboot实现校园周边美食探索及分享平台系统项目【项目源码+论文说明】

基于springboot实现园周边美食探索及分享平台系统演示 摘要 美食一直是与人们日常生活息息相关的产业。传统的电话订餐或者到店消费已经不能适应市场发展的需求。随着网络的迅速崛起&#xff0c;互联网日益成为提供信息的最佳俱渠道和逐步走向传统的流通领域&#xff0c;传统的…

每日一题————P5725 【深基4.习8】求三角形

题目&#xff1a; 题目乍一看非常的简单&#xff0c;属于初学者都会的问题——————————但是实际上呢&#xff0c;有一些小小的坑在里面。 就是三角形的打印。 平常我们在写代码的时候&#xff0c;遇到打印三角形的题&#xff0c;一般简简单单两个for循环搞定 #inclu…

MySQL 学习心得和知识总结(五)|MySQL的一般查询日志(general log)

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

权限提升技术:攻防实战与技巧

本次活动赠书1本&#xff0c;包邮到家。参与方式&#xff1a;点赞收藏文章即可。获奖者将以私信方式告知。 网络安全已经成为当今社会非常重要的话题&#xff0c;尤其是近几年来&#xff0c;我们目睹了越来越多的网络攻击事件&#xff0c;例如公民个人信息泄露&#xff0c;企业…

软件测试学习(一)

1.软件测试的定义 软件是控制计算机硬件工作的工具。 软件基本组成&#xff1a;客服端、服务器、数据库 软件产生过程&#xff1a;需求产生->需求文档->设计效果图->产品开发->产品测试->部署上线 软件测试的定义&#xff1a;使用技术手段来验证软件产品是否…

第四百三十九回

文章目录 1. 概念介绍2. 实现方法3. 示例代码 我们在上一章回中介绍了dart语言中的setter/getter相关的内容&#xff0c;本章回中将介绍局部动态列表.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 在正常情况下列表位于整个页面中&#xff0c;而且可以在整个页…

波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)

波士顿房价预测案例&#xff08;python scikit-learn&#xff09;—多元线性回归(多角度实验分析) 这次实验&#xff0c;我们主要从以下几个方面介绍&#xff1a; 一、相关框架介绍 二、数据集介绍 三、实验结果-优化算法对比实验&#xff0c;数据标准化对比实验&#xff0…

Rredis缓存常见面试题

文章目录 1.什么是缓存穿透&#xff0c;怎么解决2.什么是缓存击穿&#xff0c;怎么解决3.什么是缓存雪崩&#xff0c;怎么解决4.双写一致性问题5.redisson添加的排他锁是如何保证读写、读读互斥的6.为什么不使用延迟双删7.redis做为缓存&#xff0c;数据的持久化是怎么做的8.re…

MySQL的基本操作(超详细)

&#x1f468;‍&#x1f4bb;作者简介&#xff1a;&#x1f468;&#x1f3fb;‍&#x1f393;告别&#xff0c;今天 &#x1f4d4;高质量专栏 &#xff1a;☕java趣味之旅 &#x1f4d4;&#xff08;零基础&#xff09;专栏&#xff1a;MSQL数据库 欢迎&#x1f64f;点赞&…