zoukankan      html  css  js  c++  java
  • Vim编辑器与Shell脚本

    Vim编辑器和Shell脚本

    Vim的三种模式

    命令模式:控制光标移动,可对文本进行复制、粘贴、删除和查找等工作。
    输入模式:正常的文本录入
    末行模式:保存或退出文档,以及设置编辑环境。

    命令模式中常用的命令

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

    简单编写文本

    一进入vim编辑器中默认使用的是命令模式,可使用a、i、o三个键从命令模式切换到输入模式。:切换到末行模式。
    在输出模式下,切换其他模式,需要先按Esc,在进行命令切换。

    配置主机名称

    主机名所在位置 /etc/hostname

    ji@ji-virtual-machine:~$ vim /etc/hostname
    
    

    配置网卡信息

    网卡配置文件所在地:
    ubuntu的网卡配置未知
    应该在etc文件夹之下把

    待补
    

    配置Yum软件仓库

    # ubuntu并不支持.的写法
    ji@ji-virtual-machine:~$ cd /etc.yum.repos.d
    bash: cd: /etc.yum.repos.d: 没有那个文件或目录
    
    ### 具体vim编写内容
    [rhe17] # Yum软件仓库唯一标识
    name=rhe17# Yum软件仓库的名称描述,易于识别仓库用处
    baseurl=file://media//cdrom # 提供的方式包括http,ftp,file(本地)
    enabled=1 # 设置此源是否可用,1为可用,0为禁用
    gpgcheck=0 # 设置此源是否为校验文件,1为校验,0为不校验。
    ## 具体代码
    root@ji-virtual-machine:/etc/yum/repos.d# vim rhel7.repo
    root@ji-virtual-machine:/etc/yum/repos.d# mkdir -p /media/cdrom
    root@ji-virtual-machine:/etc/yum/repos.d# mount /dev/cdrom /media/cdrom
    mount:块设备 /dev/sr0 写保护,将以只读方式挂载
    root@ji-virtual-machine:/etc/yum/repos.d# vim /etc/fstab # 这里我并不会设置
    root@ji-virtual-machine:/etc/yum/repos.d# yum install httpd
    file://media//cdrom/repodata/repomd.xml: [Errno 14] Could not open/read file://media//cdrom/repodata/repomd.xml
    尝试其他镜像。
    错误:Cannot retrieve repository metadata (repomd.xml) for repository: rhe17. Please verify its path and try again
    root@ji-virtual-machine:/etc/yum/repos.d# 
    

    编写Shell脚本

    两种工作模式:
    交互式和批处理。

    shell使用Bash错位命令行终端解释器

    root@ji-virtual-machine:/etc/yum/repos.d# echo $SHELL
    /bin/bash
    

    编写shell脚本

    .sh文件就是该脚本文件,可用vim编写
    简单例子:
    查看当前所在工作路径并列出当前目录下所有的文件及属性信息
    vim example.sh

    #!是脚本申明
    # 是脚本注释
    #!/bin/bash
    pwd
    ls -al
    # 执行脚本
    root@ji-virtual-machine:/etc/yum/repos.d# bash example.sh
    /etc/yum/repos.d
    总用量 20
    drwxr-xr-x 2 root root 4096 12月  1 16:41 .
    drwxr-xr-x 3 root root 4096  4月 17  2021 ..
    -rw-r--r-- 1 root root   23 12月  1 16:41 example.sh
    -rw-r--r-- 1 root root   69 12月  1 16:28 rhe17.repo
    -rw-r--r-- 1 root root   69 12月  1 16:30 rhel7.rep
    

    另外一种执行的方法

    输出完整的路径来执行

    root@ji-virtual-machine:/etc/yum/repos.d# ./example.sh
    bash: ./example.sh: 权限不够
    

    但经常权限不够,可以为该文件增加执行权限,下一章中有说为文件增加权限

    接收用户的参数

    $0对应当前shell脚本程序的名称,$#对应的是总共有几个参数,$*对应的是所有未知的参数值,$?对应的是吓死你hi上一次命令的执行返回值。$1 $2分别对应着第N个未知的参数值

    # 编写参数是这样,但输出不来
    echo"fengexian=======fengeixan"
    echo"This is $0"
    echo"all $# ,they ary $*"
    echo "The first is $1 ,Second is $6"
    #执行命令语句;用bash或sh都是如此
    root@ji-virtual-machine:/etc/yum/repos.d# sh example.sh one three
    example.sh: 4: example.sh: echofengexian=======fengeixan: not found
    example.sh: 5: example.sh: echoThis is example.sh: not found
    example.sh: 6: example.sh: echoall 2 ,they ary one three: not found
    The first is one ,Second is 
    

    判断用户的参数

    测试语句格式:[ 条件表达式 ] []内两边有空格
    按测试对象划分:
    文件测试语句
    逻辑测试语句
    整数值比较语句
    字符串比较语句

    文件测试所用的参数

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

    例子

    # -d的返回值为0的话则目录存在,为1的话不存在
    root@ji-virtual-machine:/etc# [ -d etc/fastdb ] 
    # Shell解释器的内设$?变量显示上一条命令执行后的返回值
    root@ji-virtual-machine:/etc# echo $?
    1
    # -f的话同样如此,作用在文件上
    

    逻辑语句对测试结果进行逻辑分析

    &&的话就是前面成功才会执行后面,同样,判断时候若前面为False,则后面不用看了。
    逻辑或||
    逻辑非!

    可用的整数比较运算符

    -eq 是否等于
    -ne 是否不等于
    -gt 是否大于
    -lt 是否小于
    -le 是否等于或小于
    -ge 是否等于或大于
    

    例子

    root@ji-virtual-machine:~# [ 10 -gt 10 ]
    root@ji-virtual-machine:~# echo $?
    1
    root@ji-virtual-machine:~# [ 10 -et 10 ]
    bash: [: -et: 期待二元表达式
    root@ji-virtual-machine:~# [ 10 -gt 10 ]
    root@ji-virtual-machine:~# echo $?
    1
    

    实例查看当前内存剩余量

    free -m
    

    常见的字符串比较运算符

    =等于
    !=不等于
    -z 判断字符串内容是否为空
    

    实例判断当前语系的环境变量

    root@ji-virtual-machine:~# echo $LANG
    zh_CN.UTF-8
    root@ji-virtual-machine:~# [ $LANG!="en.US" ]&& echo "NOt en.US"
    NOt en.US
    

    流程控制语句

    if条件测试语句

    echo "please input your age:"
    read age
    if ["$age"-gt"20"];then # 将输入的年龄与20作对比
      echo "age is more than 20"
    else
      echo "age is less than 20"
    fi
    
    

    for循环语句

    for loop in 1 2 3 4 5 6 # 使用for循环输出in后面的数字
    do
      echo "The value is:$loop" # 输出数字
    done
    
    

    while条件循环语句

    int=1 # 初始化变量
    while(($int<=5)) # 判断变量的取值范围
    do
      echo $int
      let "int++" # 变量迭代
    done
    

    case条件测试语句

    read -p "press some key,then press return:" KEY
    case $KEY in # case语句后必须有in,每一个模式必须以右括号结束")" 
    [a-z]|[A|Z])
    echo "It's a letter."
    ;;# 命令序列结束
    [0-9])Q
    echo "It's a digit."
    ;;
    *)# 表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行"*)"后的命令序列
    echo "It's function keys、Spacebar or other ksys."
    esac
    
    

    计划任务服务程序

    计划任务分为一次性计划任务

    只执行一次,使用”at 时间“形式就可以
    查看计划任务,未执行的"at -l"
    删除,可以用" atrm 任务序号"
    使用"at xx"命令终端默认都是采用交互式方法

    root@ji-virtual-machine:~# at 23:30
    warning: commands will be executed using /bin/sh
    at> echo "hello world"
    at> <EOT>
    job 1 at Wed Dec  1 23:30:00 2021
    root@ji-virtual-machine:~# at -l
    1	Wed Dec  1 23:30:00 2021 a root
    # 删除任务
    root@ji-virtual-machine:~# atrm 1
    

    长期性计划任务

    使用crond服务(linux默认启用),
    查看 “crontab -l”
    删除 " crontab -r"
    管理员登陆的话,可以使用-u参数来编辑他人的计划任务
    分时日月星期
    crond设置任务的参数字段说明

    分 0~59
    时 0~23
    日 1~31
    月 1~12
    星期 0~7的任意整数,其中0与7均为星期日
    

    例子
    corontab -e创建计划任务
    可我进入之后就退不出来了;有可能后面没加执行命令的路径。

    root@ji-virtual-machine:~# crontab -e
    no crontab for root - using an empty one
    
    Select an editor.  To change later, run 'select-editor'.
      1. /bin/ed
      2. /bin/nano        <---- easiest
      3. /usr/bin/vim.basic
      4. /usr/bin/vim.tiny
    
    Choose 1-4 [2]: 1
    888
    

    分时日月星期用空格隔开
    但是可以用逗号表示多个时间段,可以用减号表示一段连续的时间(12-15可用来表示每月的12-15号)
    用除号(/)表示执行任务的间隔时间(*/2表示每隔2分钟执行)
    在计划任务时,命令路径需以绝对路径来写,whereis查看路径。
    tips笔记:linux就该这样学

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    Codeforces Round #443 (Div. 2)
    Matplotlib学习---用seaborn画联合分布图(joint plot)
    Matplotlib学习---用matplotlib和sklearn画拟合线(line of best fit)
    Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)
    Matplotlib学习---用matplotlib画误差线(errorbar)
    Matplotlib里颜色,标记,线条类型参数的选择(colors, markers, line styles)
    Matplotlib学习---用matplotlib画阶梯图(step plot)
    Matplotlib学习---用matplotlib画箱线图(boxplot)
    Matplotlib学习---用seaborn画相关矩阵图(pair plot)
    Matplotlib学习---用matplotlib画面积图(area chart)
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15630037.html
Copyright © 2011-2022 走看看