Linux学习笔记(6)基本命令Part6——Vim编辑器的使用、Shell编程

一般模式
编辑模式
插入模式

【知识点总结】

vi编辑器的3种工作模式:
1)命令模式(一般模式)
一开始进入vi编辑器,就已经处于命令模式
可以输入英文冒号:,进入底行命令模式以退出vi编辑器

2)插入模式(编辑模式)
①进入插入模式的方法——输入:
i(插入命令)【最常用】
a(附加命令)
o(打开命令)
s(替换命令)
e(修改命令)
r(取代命令)

②退出方法:按Esc键

3)底行命令模式
特点:以英文冒号:开始

常见的底行命令:
:w 保存
q 退出(只能在没有修改文件内容的情况下用此方法退出,否则会报错)
:q! 强制不保存退出
:wq! 保存退出
:w filename 将内容另存为filename
:wq! filename 以filename为文件名保存后退出

 
三种模式之间的转换:
在这里插入图片描述

======================================

Vim编辑器的使用:

在命令行中输入vim命令启动vim,vim后面不加文件名,启动vim后默认进入编辑模式。
在编辑模式下按i键进入插入模式,输入如下所示的程序。为了方便下文表述,这里把代码的行号也一并列出。
1 #include <stdio.h>
2
3 int main()
4 {
5 int hour1, minute1;
6 int hour2, minute2
7
8 scanf("%d %d", &hour1, &minute1);
9 scanf("%d %d", hour2, &minute2);
10
11 int t1 = hour1 * 6 + minute1;
12 int t = t1 - t2;
13
14 printf(“time difference: %d hour, %d minutes \n”, t/6, t%6);
15
16 return 0;
17 }

#include <stdio.h>

int main()
{
    
    
      int hour1, minute1;
      int hour2, minute2

      scanf("%d %d", &hour1, &minute1);
      scanf("%d %d", hour2, &minute2);

      int t1 = hour1 * 6 + minute1;
      int t = t1 - t2; 
     
      printf("time difference: %d hour, %d minutes \n", t/6, t%6);
     
      return 0;
}

(1)按Esc键返回编辑模式。输入“:”进入命令行模式,输入“w timediff.c”将程序保存为文件timediff.c,输入“:q”退出vim。

(2)重新启动vim,打开文件timediff.c,输入“:set nu”显示行号。

打开文件timediff.c:
[root@localhost ~]#vi timediff.c在这里插入图片描述

(3)因为文件内容比较少,所以全部内容可在一屏中显示。在编辑模式下,按M键将光标移动到当前屏幕中央一行的行首,输入“1g”或“gg”将光标移动到第一行的行首。

这里老师给的题目出错了,应该是:
一般模式,才能按M键将光标移动到当前屏幕中央一行的行首(M键:shift+m同时按)
1g不行,要按1G(一定要大写)
(下同,标黄色高光处为已修改的)

(4)在一般模式下输入“6G”将光标移动到第6行行首,按A键进入插入模式,此时光标停留在第6行行尾。输入“;”,按Esc键返回编辑模式。

(5)在一般模式下输入“9G”将光标移动到第9行行首。按w键将光标移动到下一个单词的词首,连续按l键向右移动光标,直接光标停留在“hour2”单词的词首。按i键进入插入模式,输入“&”,按Esc键返回编辑模式。

(6)在一般模式下输入“11G”将光标移动到第11行行首。输入“yy”复制第11行的内容,按p键将其粘贴到第11行的下面一行。此时,原文件的第12~17行依次变为第13~18行,并且光标停留在新添加的第12行的行首。

(7)在一般模式下连续按e键使光标移动到下一个单词的词尾,直至光标停留在“t1”的词尾字符“1”处。按s键删除字符“1”并随即进入插入模式。在插入模式下输入“2”,按Esc键返回编辑模式。重复此操作并把“hour1”“minute1”中的字符“1”修改为“2”。

【总结】
e键:光标移动到下个单词的词尾
s键:删除光标所在字符+进入插入模式

(8)在一般模式下按k键将光标上移1行,即移动到第11行,输入“:11,15s/6/60/gc”,进入命令行模式,将第11~15行中的“6”全部替换为“60”。注意,在每次替换时都要输入“y”给予确认。替换后,光标停留在第15行。

【解释】:11,15s/6/60/gc
: 进入底层命令行模式
11,15s 对11~15行进行处理
6/60 将6替换为60
gc 替换, 并在每次替换之前进行提示

更多可参考:vi/vim/gvim编辑器常用命令

 
每到一处要替换的地方,就按一次y,然后该处就被替换了,跳转到下一个待替换的地方
在这里插入图片描述

(9)在编辑模式下输入“2j”将光标下移2行,即移动到第17行。输入“dd”删除第17行,输入“u”撤销删除操作。

(10)在编辑模式下输入“:wq”进入命令行模式,保存文件后退出vim编辑器。

Shell编程:

(1)编写Shell程序,显示当前日期时间、执行路径、用户账户及所在的目录位置。

①创建脚本:

[root@localhost ~]# vi test

参考:如何创建Shell脚本

②编写Shell程序:
shell脚本的第一行是必须按照如下格式写,因为它表示的含义是当前的shell脚本使用/bin/bash处理
(关于第一行写什么,可以用命令[root@localhost ~]# echo $SHELL查询)

第二行一般写脚本的文件名

#!/bin/bash
#test

echo -n "Current time and date:"
date

echo -n "Program execution path:"$PATH

echo "Current username: `whoami`"

echo -n "Current path:"
pwd

#end
~
~
~

"test" [New] 13L, 161C written

③运行检验:

[root@localhost ~]# sh test

Current time and date:Mon Dec  7 14:55:15 CST 2020
Program execution path:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/binCurrent username: root
Current path:/root

参考:如何运行Shell程序

(2)编写Shell程序,判断一个文件是不是字符设备文件,并给出相应的提示信息。

[root@localhost ~]# vi test1.sh
#! /bin/bash
#test1.sh

echo -e "please input filename \n"
read FILENAME

if [-c $FILENAME]
then
echo "It's character device file"

else
echo "It's not character device file"

fi


:wq

(3)编写Shell程序,从键盘输入两个字符串,比较两个字符串是否相等。

[root@localhost ~]# vi test2.sh
#!/bin/bash
#test2.sh

string1="str1"
string2="str2"

if $string1 = $string2
then
echo "string1 is equal to string2"

else
echo "string1 is not equal to string2"

fi
~
~
~
"test2.sh" [New] 14L, 166C written
[root@localhost ~]# sh test2.sh
test2.sh: line 7: str1: command not found
string1 is not equal to string2

(4)编写Shell程序,分别用for、while、与until语句求从整数1到100的和。

①程序

[root@localhost ~]# vi test3.sh
#!/bin/bash
#test3.sh

echo "====using for:===="
i=0
sum1=0

for i in `seq 1 1 100`
do
((sum1=sum1+$i))
done
echo "1+2+...+100=$sum1"


echo "====using while:===="
j=0
sum2=0

while((j<101))
do
((sum2=sum2+j))
((j+=1))
done

echo "1+2+...+100=$sum2"


echo "====using until:===="
k=0
sum3=0
until((k>100))
do
((sum3+=k))
((k+=1))
done

echo "1+2+..+100=$sum3"

②检验

[root@localhost ~]# sh test3.sh
====using for:====
1+2+...+100=5050
====using while:====
1+2+...+100=5050
====using until:====
1+2+..+100=5050

(5)编写Shell程序,实现每天将主目录下的所有目录和文件归档并压缩为文件mybackup.tar.gz,然后让该脚本开机自动运行。

【这个我也不太确定对不对,主要是开机自动运行一直实现不了,如果有大神会也可以教一下我233】

[root@localhost ~]#vi cronfile1
0       0       *       *       *       tar rf mybackup.tar home/
0       9       *       *       *       tar czf mybackup.tar.gz home/

[root@localhost ~]#crontab cronfile1
[root@localhost ~]#crontab -e


======
可参考:参考
主目录和根目录的区别

猜你喜欢

转载自blog.csdn.net/weixin_43616639/article/details/110803580