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命令是一个非常强大的命令,它可以用来复制文件、转换文件格式等操作,但是它也可以用来清空一个文件。

如下操作:

相关推荐

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

    2024-04-03 23:12:03       11 阅读
  2. Shell脚本应用(二)

    2024-04-03 23:12:03       37 阅读
  3. sh与bash:Shell脚本微妙差异

    2024-04-03 23:12:03       15 阅读
  4. Vim脚本语言入门:打造你编辑器

    2024-04-03 23:12:03       17 阅读
  5. 6 Shell脚本条件测试与比较

    2024-04-03 23:12:03       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 23:12:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 23:12:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 23:12:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 23:12:03       20 阅读

热门阅读

  1. Redis面试题15道

    2024-04-03 23:12:03       12 阅读
  2. pip install PyQt5 ssl error

    2024-04-03 23:12:03       13 阅读
  3. Python实战:打造学生信息管理系统

    2024-04-03 23:12:03       13 阅读
  4. PostCSS及其常用插件介绍

    2024-04-03 23:12:03       12 阅读
  5. 【python】网络爬虫——Scrapy

    2024-04-03 23:12:03       15 阅读