zoukankan      html  css  js  c++  java
  • Vim编辑器和Shell命令脚本

    Vim编辑器和Shell命令脚本

    Vim文本编辑器

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

    命令模式和末行模式下的一些快捷键:

    末行模式下的命令:

    Shell命令脚本

    Shell终端解释器类似人与计算机硬件的翻译官,作为用户与Linux系统内部通讯的媒介。Shell脚本命令的工作方式有两种,首先是前面所接触的交互方式,即当用户每输入一条命令就执行一次,而批量处理则是用户事先编好一个完整的Shell脚本,Shell会一次性执行脚本中诸多的命令。可以通过SHELL变量查看系统当前已经默认使用bash解释器作为命令行终端了。

    编写简单的脚本

    使用vim编辑器把Linux命令按照顺寻一次写入文件就是编写完成一个最简单的脚本,下体是编写一个查看当前所在工作路径并列出目录下所有文件及属性信息。


    Shell脚本的名称可以任意起,行业规范脚本文件的后缀一般是.sh,脚本内容中:#!表示用何种shell解释器来执行脚本程序,#表示注释信息,后面就是命令行。执行脚本的方法有两种:第一种是如上图使用“解释器 shell脚本”运行,这样系统则会忽略掉脚本内容中的#!内容,第二种是输入完整路径的方式来执行,但是系统会默认因为权限不足而提示报错信息,这时需要为脚本文件增加权限。

    接收用户的参数

    脚本中定义了很多变量功能,例如“$0”对应当前shell脚本程序的名称,“$#”对应总共有几个参数,“$*”对应所有位置的参数值,而“$1”“$2”等对应第N个位置的参数。

    判断用户的参数

    为了判断用户输入的参数,需要使用条件测试语法,若条件成立则返回0,否则则返回其他随机数值。测试语句格式:[ 条件表达式 ]两边均有一个空格,条件判断语句按测试对象可分为文件测试、逻辑测试、整数值比较与字符串比较.

    文件测试

    文件测试是按照指定条件来判断文件是否存在或者权限是否满足,具体参数为:


    通过$?得到上一条命令的返回值

    逻辑测试

    逻辑测试则是判断用户给出的条件是为真还是假,从而把条件测试语句与逻辑语句相搭配结合使用可以实现一个更高级的使用方法,例如在Shell终端中逻辑“与”符号是&&,它代表当前面的命令执行成功后才会执行后面的命令。

    “或”符号是“||”,其代表前面的命令执行失败后才会执行后面的命令

    整数值比较

    整数比较运算符是仅对数字的测试操作,不能把数字与字符串、文件等内容一起操作,而且不能想当然的使用日常生活中的等号、大于号、小于号等来做判断,因为等号与是赋值命令符冲突,大于号和小于号分别是和输出重定向命令符和输入重定向命令符冲突。虽然有时候碰巧也能执行成功,但是在后面脚本程序中普遍会产生错误,一定要使用规范的整数比较运算符来进行操作:

    字符串比较

    字符串比较是判断测试字符串是否为空值,或两个字符串是否相同的操作,常常用来判断某个变量是否未被定义(即内容为空值),常用参数:

    流程控制语句

    if条件测试语句

    单分支结构(if-then-fi)


    shell脚本文件:如果在linux目录中不存在hahaha文件,则创建hahaha文件
    测试结果:

    双分支结构(if-then-else-if)
    多重分支(if-then-elif-then-else-fi)


    如果成绩大于85小于100,则输出excellent等等...
    测试结果:

    for条件循环语句

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

    下面是批量创建用户的例子:

    第1行的read命令是读取客户输入的值作为变量PASSWD的值,-p参数是为了输出提示语句。
    第6行的id $UNAME命令可查看是否存在该用户,&>表示不管前面命令输出的是正确结果还是错误结果,都将输出信息重定向到/dev/null,/dev/null是被称作Linux黑洞的文件,把输出信息重定向到这个文件后等同于删除数据(没有回收功能的垃圾箱),让用户的屏幕窗口保持简洁。
    第7行表示如果id $UNAME执行成功,则说明该用户存在。
    第11,12行则是添加用户的命令和设置密码的命令。
    注意:变量间的相加在linux系统中默认是字符串相加,例如:

    要实现两个变量的值相加,需要使用expr命令将字符串转换为数字

    while条件循环

    格式:
    while 条件测试操作
    do
    命令序列
    done

    利用while写一个猜价格的脚本

    测试结果

    case条件测试

    格式:
    *case 变量值 in
    模式1)
    命令序列1
    ;;
    模式2)
    命令序列2
    ;;

    默认命令序列
    esac

    测试:

    计划任务服务程序

    一次性计划任务(使用at命令行)

    例子:

    使用atrm + 编号可以删除对应编号的计划任务

    周期性计划任务

    可以使用Linux系统中默认启用的crond服务创建任务。创建、编辑计划任务的命令为crontab -e,查看当前计划任务的命令为crontab -l,删除某条计划任务的命令为crontab -r,如果使用管理员登陆系统,可以用crontab -u来编辑他人的任务。口诀:分、时、日、月、星期

    需要说明的是,除了用逗号来表示多个时间段,例如”8,9,12”表示8月,9月和12月;还可以用减号来表示连续的时间周期(例如字段“日”的取值为“12-15”,则表示每月的12~15日)。以及用除号(/)表示执行任务的间隔时间(例如“*/2”表示每隔2分钟执行一次任务)。
    另外,在crond服务的计划参数中,所用命令一定要用绝对路径的方式来写,如果不知道绝对路径,可以用whereis命令进行查询,绝对路径为输出信息的加粗部分。

  • 相关阅读:
    【linux就该这么学】-05
    【linux就该这么学】-04
    【linux就该这么学】-03
    【linux就该这么学】-02
    【linux就该这么学】-01
    【linux就该这么学】-00
    MySQL57安装与设置
    Docker(一) Docker入门教程
    Centos 7.X 安装及常规设置
    删除数组里所有与给定值相同的值
  • 原文地址:https://www.cnblogs.com/huangzefeng/p/9261084.html
Copyright © 2011-2022 走看看