Linux基础(3) Vim编辑器与Shell命令脚本

1、VIM文本编辑器

  • VIM编辑器的三大模式
  1. 命令模式: 控制光标移动,可对文本进行复制、粘贴和查找等工作
  2. 输入模式: 正常的文本录入。
  3. 末行模式: 保存或退出文档,以及设置编辑环境
  4. 三种模式的切换
    请添加图片描述
    注意: 命令模式切换到输入模式的3种方法:1、a键:在光标的后一位切换到输入模式。2、i键:在光标的当前位置切换到输入模式。3、o键:在光标的下面再创建一个空行,并切换到输入模式,一般常用于文件追加操作中。
  • 命令模式常用命令
命令作用
dd删除(剪切)光标所在的整行
5dd删除(剪切)光标处开始的5行
yy复制光标所在整行
5yy复制从光标处开始的5行
p将之前剪切或者复制过的数据粘贴到光标后面
u撤销上一步操作
n显示搜索命令定位到的下一个字符串(结合末行模式的搜索字符串命令)
N显示搜索命令定位到的上一个字符串(结合末行模式的搜索字符串命令)
  • 末行模式常用命令
命令作用
:wq!写入 -> 退出 -> 强制 ,使用时可排列组合
:set nu显示行号
:set nonu不显示行号
:命令执行该命令
:整数跳转到该行
?字符串在本文中从下至上搜索该字符串
/字符串在本文中从上至下搜索该字符串
: s/one/two将当前光标所在行的第一个one替换成two
: s/one/two/g将当前光标所在行的所有one替换成two
: %s/one/two/g将全文中所有的one替换成two
  • 小知识

    ​1. 主机名大多存放在/etc/hostname中,可通过vim编辑器编辑文件中的内容来更改主机名。

2、编写Shell脚本

  • Shell脚本的工作方式

    1. 交互式(interactive):用户输入一条命令就立即执行。

    2. 批处理(Batch):用户事先编写好一个完整的Shell脚本,Shell会一次性执行脚本中的诸多命令。

    eg: 查看当前命令行终端解释器

    echo $SHELL #打印结果:/bin/bash 表明系统已经默认使用Bash作为命令行终端解释器了
    
  • 编写简单的脚本

    eg: 使用命令vim example.sh生成一个Shell脚本文件,最好添加.sh后缀,文件内容如下:

    #!/bin/bash
      #This is a simple example
      pwd
      ls -l
    

    ​其中,脚本声明#!告诉系统使用的Shell解释器,注释信息#对脚本的信息进行介绍,其他内容则是相应的Linux命令。

  • 运行Shell脚本文件
    eg:bash example.sh

    使用Bash解释器直接运行Shell脚本文件。

    eg:./example.sh

    直接输入完整的路径来执行脚本文件。

  • 接收用户的参数

    eg: 使用命令vim example.sh生成一个Shell脚本文件,文件内容如下:

    #!/bin/bash
    echo "当前的脚本名称为$0"
    echo "总共有$#个参数,分别是$*"
    echo "第一个参数为$1,第五个参数为$5"
    

    执行命令bash example.sh 1 2 3 4 5后,最后的执行结果为:

    当前的脚本名称为example.sh
    总共有5个参数,分别是1 2 3 4 5
    第一个参数为1,第五个参数为5
    

    其中$0对应当前Shell脚本程序的名称,$1、$2、$3...分别对应着第N个位置的参数值,$#对应参数的个数,$*对应的是所有位置的参数值,$?对应的是显示上一次命令的执行返回值。

  • 判断用户的参数

    测试语句的格式为[ 条件表达式 ],注意方括号和条件表达式之间有空格。Shell脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字0,否则便返回非零值

    条件测试语句可以分为4种:

    1. 文件测试语句
    2. 逻辑测试语句
    3. 整数值比较语句
    4. 字符串比较语句
  • 文件测试语句

    eg: 测试文件是否为目录类型

    [ -d /etc/fstab ] #第一次执行
    echo $? #第二次执行
    

    输出结果为1,表明文件/etc/fstab不是目录,或这个目录不存在
    eg: 测试文件是否为一般文件

    [ -f ./example.sh ] #第一次执行
    echo $? #第二次执行
    

    输出结果为0,表明文件存在,且为一般文件。
    eg: 测试文件是否存在

    [ -f ./xxxxxx ] #第一次执行
    echo $? #第二次执行
    

    输出结果为1,表明文件不存在

    文件测试所用的参数如下:

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

    eg: 测试文件是否为目录类型

    [ ! -d /etc/fstab ] || echo "dir" && echo "Not a dir"
    

    输出结果为Not a dir,表明文件/etc/fstab不是目录,或这个目录不存在。执行顺序:语句[ ! -d /etc/fstab ]返回,则不执行||后的操作,而转去执行&&后操作,即输出Not a dir

    逻辑测试所用的参数如下:

    运算符作用
    &&只有当前面的语句为真,才执行后面的语句
    ||只有当前面的语句为假,才执行后面的语句
    逻辑测试结果取反
  • 整数值比较语句

    eg: 比较两个数的大小

    [ 1 -lt 2 ] && echo "True" || echo "False"
    

    输出结果为True,表明12小。

    逻辑测试所用的参数如下:

    运算符作用
    -eq是否等于
    -ne是否不等于
    -gt是否大于
    -lt是否小于
    -le是否等于或小于
    -ge是否大于或等于
  • 字符串比较语句

    eg: 比较两个字符串是否相同

    [ $USER = lh ] && echo "user is lh" || echo "user is not lh"
    

    输出结果为user is lh,证明此时用户名称为lh

    字符串测试所用的参数如下:

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

3、流程控制语句

  • if测试语句

    1. 单分支结构
    if 条件测试语句
    	then 命令序列
    fi
    
    1. 双分支结构
    if 条件测试语句
    	then 命令序列1
    	else 命令序列2
    fi
    
    1. 多分支结构
    if 条件测试语句1
    	then 命令序列1
    elif 条件测试语句2
    	then 命令序列2
    else
    	命令序列3
    fi
    

    eg: 测试某台主机是否在线

    1.使用命令vim checkhost.sh新建一个shell脚本,在脚本中编辑:

    #!/bin/bash
    ping -c 3 -i 0.2 -W 3 $1 &> /dev/null # -c:尝试的次数 -i:每个数据的发送间隔 -W:等待时间
    # 文件/dev/null被称作Linux黑洞的文件,把输出信息重定向到这个文件等同于删除数据。
    if [ $? -eq 0 ] 
    then
            echo "Host $1 is On-line"
    else
            echo "Host $1 is Off-line"
    fi
    

    2.测试该脚本

    bash checkhost.sh 127.0.0.1 #测试本地环回地址,最终屏幕打印:Host 127.0.0.1 is On-line
    bash checkhost.sh 192.168.123.123 #随便测试一个地址,最终屏幕打印:Host 192.168.123.123 is Off-line
    
  • for语句

    for语句语法格式

    for 变量名 in 取值列表
    do
    	命令序列
    done
    

    eg:使用for循环语句从列表文件中读取多个用户名,然后为其逐一创建用户账户并设置密码。
    ​1.使用命令vim users.txt新建用户列表:

    andy
    barry
    carl
    duke
    eric
    george
    

    2.编写shell脚本addusers.sh

    #!/bin/bash
    read -p "Enter The Users Password:" PASSWD #脚本中使用read命令读取用户输入的密码,并赋值给PASSWD
    for UNAME in `cat users.txt`
    #上面这句亦可以修改成:
    #List = $(cat users.txt)
    #for UNAME in $List
    do
            id $UNAME &> /dev/null #"id 用户名"命令用于查看用户的信息
            if [ $? -eq 0 ]
            then
                    echo "$UNAME,Already exists"
            else
                    useradd $UNAME
                    echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null #密码传递
                    echo "$UNMAE ,Create sucess"
            fi
    done
    

    3.执行脚本并输入相应的密码,屏幕中显示创建成功的信息,利用tail -6 /etc/passwd命令可以查看新建的用户信息。

  • while条件循环语句

    while语句语法格式

    while 条件测试判断
    do
    	命令序列
    done
    

    eg:猜数字小游戏

    #!/bin/bash
    #猜测数字游戏
    REALNUM=$(expr $RANDOM % 1000)  # expr语句用于表示表达式,具体用法自行查询
    TIMES=0  # 猜测的次数
    
    while true
    do
            read -p "请输入你猜测的数字(0-999):" INT 
            let TIMES++ 
    
            if [ $INT -gt $REALNUM ]
            then
                    echo "你输入的数字太大了"
            elif [ $INT -eq $REALNUM ]
            then
                    echo "恭喜你,这个数字就是 $INT"
                    echo "本局你已经猜测了 $TIMES 次了"
                    exit   #切记:退出while循环时一定要使用exit命令
            else
                    echo "你输入的数字太小了"
            fi
    done
    
  • case条件测试语句

    case语句语法格式

    case 变量值 in
    模式1)
    	命令序列1
    	;;
    模式2)
    	命令序列2
    	;;
    	......
    *)
    	默认命令序列
    esac
    

    eg: 判断输入的字符类型

    #!/bin/bash
    read -p "请输入一个字符:" KEY 
    case $KEY in
            [A-Z]|[a-z])
                    echo "你输入的是字母"
                    ;;
            [0-9])
                    echo "你输入的是数字"
                    ;;
            *)
                    echo "你输入的是特殊字符"
    esac
    

4、计划任务服务程序

  • 计划的分类

    1. 一次性计划任务
    2. 长期性计划任务
  • 一次性计划任务

    eg: 使用交互式方法设置今晚23:30自动重启网站服务

    [lh@LH_LINUX]$ at 23:30
    warning: commands will be executed using /bin/sh
    at> systemctl restart httpd
    at> #使<CTRL>+<D>结束编写计划任务
    job 1 at Sat Mar 18 23:30:00 2023
    

    eg: 使用非交互式方法设置两小时后自动重启网站服务(使用管道命令)

    [lh@LH_LINUX]$ echo "systemctl restart httpd" | at now +2 HOUR
    warning: commands will be executed using /bin/sh
    job 3 at Sat Mar 18 20:38:00 2023
    

    时间参数MONTH(月)、DAY(日)、HOUR(时)和MINUTE(分)
    eg: 删除计划任务

    [lh@LH_LINUX]$ at -l #查看一次性任务
    3	Sat Mar 18 20:38:00 2023 a lh
    1	Sat Mar 18 23:30:00 2023 a lh
    [lh@LH_LINUX]$ atrm 3 #删除第3条任务
    
  • 长期性计划任务

    eg: 创建两个自动化任务

    1. 使用命令crontab -e编辑自动化任务,在VIM编辑器里写入

      25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot #每周一、三、五的3:25分将目录数据进行打包
      */2 * * * 1-5 /usr/bin/rm -rf /tmp/* #周一至周五每隔2分钟清空`/tmp`目录中的内容
      

      格式:“分、时、日、月、星期 命令”

      注意:,分别表示多个时间段,-表示一段连续的时间周期,/表示执行任务的时间间隔;计划中的“分”字段必须要有数值,“日”和“星期”字段不能同时使用,否则就会发生冲突

    2. 使用命令crontab -l可以再次查看自动化任务

    eg: 删除自动化任务

    使用命令crontab -r即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

app自动化测试——Android studio安装与配置

文章目录一、Appium框架介绍二、Appium 生态工具三、环境安装四、安装Android studio五、配置环境变量六、创建模拟器查看设备启动模拟器一、Appium框架介绍 1、跨语言&#xff1a;java、python等 2、跨平台&#xff1a;Android、IOS、Windows、Mac 3、底层多引擎切换 4、生态…

(待补充)小蒟蒻的刷题成长之路-------2023年中国高校计算机大赛-团队程序设计天梯赛(GPLT)上海理工大学校内选拔赛(同步赛)

小蒟蒻的刷题成长之路 蓝桥杯的比赛流程和必考点_蓝桥杯省赛考点_时雨h的博客-CSDN博客 大一学生一周十万字爆肝版C语言总结笔记_大一c语言笔记_时雨h的博客-CSDN博客 程序设计与 C 语言期末复习_时雨h的博客-CSDN博客 P8597 [蓝桥杯 2013 省 B] 翻硬币个人思考总结第五届传智杯…

西瓜视频登录页面

题目 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>登录页面</title><style>td{width: 160px;height: 25px;}img{width: 20px;height: 20px;}.number, .password{background: rgba(0,0,0,.05);}.numbe…

指针进阶(上)

内容小复习&#x1f431;&#xff1a; 字符指针:存放字符的数组 char arr1[10]; 整型数组:存放整型的数组 int arr2[5]; 指针数组:存放的是指针的数组 存放字符指针的数组(字符指针数组) char* arr3[5]; 存放整型指针的数组(整型指针数组) int* arr[6]; 下面进入学习了哦~&…

【二分查找】

二分查找704. 二分查找35. 搜索插入位置34. 在排序数组中查找元素的第一个和最后一个位置结语704. 二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在…

mybatis中获取参数的两种方式:${}和#{}

目录 1.#{} 2.${} 3.总结 1.#{} 本质是占位符赋值 示例及执行结果&#xff1a; 结论&#xff1a;通过执行结果可以看到&#xff0c;首先对sql进行了预编译处理&#xff0c;然后再传入参数&#xff0c;有效的避免了sql注入的问题&#xff0c;并且传参方式也比较简单&#xf…

Python制作9行最简单音乐播放器?不,我不满足

人生苦短 我用python 好久不见啦~这次就来给大家整个大福利 ~ 源码资料电子书:点击此处跳转文末名片获取 最简单的9行代码音乐播放器如下&#xff1a; import time import pygamefile r歌曲路径 pygame.mixer.init() print(正在播放,file) track pygame.mixer.music.load(f…

计算机面试常见问答题目

英语口语 自我介绍 Hello, teachers. My name is Wang Xu. I come from Ningxia. I graduated from the School of Computer Science, Xi an Jiaotong University, majoring in Internet of Things. Next, I will introduce myself from four aspects. First of all, I studi…

Java开发 - ELK初体验

前言 前面我们讲过消息队列&#xff0c;曾提到消息队列也具有保存消息日志的能力&#xff0c;今天要说的EL看也具备这个能力&#xff0c;不过还是要区分一下功能的。消息队列的日志主要指的是Redis的AOF&#xff0c;实际上只是可以利用了消息队列来保存&#xff0c;却并不是消…

网络编程1(网络背景知识)

A给B发送消息如何保证数据一定能够发送到B的主机上&#xff0c;而不是其他地方 通过IP地址可以实现网络中制定的两个主机之间的通信&#xff0c;除此之外还要确定是哪个进程来处理&#xff0c;这里就用到端口&#xff08;port&#xff09; 端口—在一台主机上用于唯一标识一个…

MySQL索引特性

文章目录为什么要有索引&#xff1f;认识磁盘磁盘的结构磁盘的盘片结构定位扇区磁盘随机访问 (Random Access)与连续访问 (Sequential Access)MySQL与磁盘交互索引的理解测试主键索引索引的原理索引结构是否可以使用其他数据结构B树 vs B树聚簇索引 vs 非聚簇索引为什么要有索引…

基于深度学习的犬种识别软件(YOLOv5清新界面版,Python代码)

摘要&#xff1a;基于深度学习的犬种识别软件用于识别常见多个犬品种&#xff0c;基于YOLOv5算法检测犬种&#xff0c;并通过界面显示记录和管理&#xff0c;智能辅助人们辨别犬种。本文详细介绍博主自主开发的犬种检测系统&#xff0c;在介绍算法原理的同时&#xff0c;给出Py…

分布式微服务架构下网络通信的底层实现原理

在分布式架构中&#xff0c;网络通信是底层基础&#xff0c;没有网络&#xff0c;也就没有所谓的分布式架构。只有通过网络才能使得一大片机器互相协作&#xff0c;共同完成一件事情。 同样&#xff0c;在大规模的系统架构中&#xff0c;应用吞吐量上不去、网络存在通信延迟、我…

Qt音视频开发26-监控画面各种图形绘制设计

一、前言 视频监控系统做到后面&#xff0c;逐渐需要搭配人工智能算法&#xff0c;将算法计算后的信息以OSD标签以及方框各种图形的信息显示到视频中&#xff0c;这种当然和OSD一样也是有两种方式&#xff0c;一种是源头就贴好了&#xff0c;一种是将结果发给软件这边解析绘制…

专项攻克——死锁

文章目录O、死锁定义一、 常见的java死锁代码1. synchronized等待对象释放&#xff0c;导致死锁2. CountDownLatch计数等待&#xff0c;导致死锁二、怎么避免死锁2.1 死锁的四个必要条件2.2 避免死锁2.3 常见的避免死锁技术三、java程序出现死锁&#xff0c;怎么解除&#xff1…

Vue使用的编辑器

作者简介&#xff1a;一名计算机萌新、前来进行学习VUE,让我们一起进步吧。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;我叫于豆豆吖的主页 目录 前言 一.vue常用的IDE工具Visual Studio Code 3. 汉化教程 4.常用快捷键 5. Visual Studio C…

瑞萨Renesas RA2L1 开发板测评(1)--keil环境配置

前言&#xff08;1&#xff09;首先感谢李肯前辈的活动&#xff0c;从而申请到了RA2L1开发板的测评。&#xff08;2&#xff09;本文将会简单介绍此开发的Renesas RA2L1 开发板的前期配置。需要注意的是&#xff0c;MDK版本要5.30 以上。MDK下载链接&#xff1b;&#xff08;3&…

计算机中的浮点数运算

计算机中的浮点数 计算机中以固定长度存储浮点数的方式&#xff0c;造成了浮点数运算过程容易产生上溢和下溢。以float32为例, 其标记位占1bit,指数位占8bit,小数部分占23bit 经典下溢场景 不满足精度导致截断误差 #include <iostream> #include <iomanip> usin…

一行代码“黑”掉任意网站

文章目录只需一行代码&#xff0c;轻轻一点就可以把任意网站变成暗黑模式。 首先我们先做一个实验&#xff0c;在任意网站中&#xff0c;打开浏览器开发者工具(F12)&#xff0c;在 C1onsole 控制台输入如下代码并回车&#xff1a; document.documentElement.style.filterinve…

Hive 数据倾斜

数据倾斜&#xff0c;即单个节点任务所处理的数据量远大于同类型任务所处理的数据量&#xff0c;导致该节点成为整个作业的瓶颈&#xff0c;这是分布式系统不可能避免的问题。从本质来说&#xff0c;导致数据倾斜有两种原因&#xff0c;一是任务读取大文件&#xff0c;二是任务…