Linux学习-Vim 编辑器与 Shell 命令脚本

学习资料《Linux就该这么学》

1、Vim编辑器

Vim三种工作模式:默认进入命令模式。

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

输入模式:编写完成保存退出前需要按Esc键。

a:光标后面一位切换到输入模式;

i:光标当前位置切换到输入模式;

o:在光标下面在创建一行,在敲击a则进入编辑器的输入模式。在原文本上继学编辑使用o进继续进行编辑。

 

命令模式:在每次运行 Vim 编辑器时,默认进入命令模式,此时需要先切换到输入模式后再进行文档编写工作,而每次在编写完文档后需要先返回命令模式,然后再进入末行模式,执行文档的保存或退出操作。

dd            删除(剪切)光标所在整行
5dd         删除(剪切)从光标处开始的 5 行
yy            复制光标所在整行
5yy         复制从光标处开始的 5 行
n             显示搜索命令定位到的下一个字符串
N            显示搜索命令定位到的上一个字符串
u             撤销上一步的操作
p            将之前删除(dd)或复制(yy)过的数据粘贴到光标后面

 

末行模式:主要用于保存或退出文件,以及设置 Vim 编辑器的工作环境,还可以让用户执行外部的 Linux 命令或跳转到所编写文档的特定行数。要想切换到末行模式,在命令模式中输入一个冒号就可以了。
: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
?字符串                 在文本中从下至上搜索该字符串
/字符串                  在文本中从上至下搜索该字符串

2、编写shell脚本

2.1 初识shell脚本

Shell终端解释器当做人和计算机之间的“翻译官”,他作为用户和Linux系统内部之间的通信媒介,除了支持各种变量和参数之外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。Shell脚本命令的工作方式有两种:交互式和批处理。

➢ 交互式(Interactive):用户每输入一条命令就立即执行。
➢ 批处理(Batch):由用户事先编写好一个完整的 Shell 脚本, Shell 会一次性执行脚本
中诸多的命令。
 

在Liunx系统中创建新的脚本文件一般包括以下三个部分,以.sh作为后缀名:

(#!)用来告诉系统使用的是哪种Shell解释器来执行该脚本;

(#)用作注释信息,对脚本信息的功能或者是用做一些警告信息;

()自己需要执行的一些Linux命令信息。

例如:

#!/bin/bash
#An example
pwd
ls -al

需要执行.sh文件时,可以使用 bash  XX.sh来执行编写的shell脚本文件。

2.2 接收用户参数

shell脚本在执行时可以接受用户输入的参数,例如$0 对应的是当前 Shell 脚本程序的名称, $#对应的是总共有几个参数, $*对应的是所有位置的参数值, $?对应的是显示上一次命令的执行返回值,而$1、$2、 $3……则分别对应着第 N 个位置的参数值,

实例:

#!/bin/bash
#An examplel
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*"
echo "第一个参数为$1,第五个是$5"
@ubuntu:~/linux_example$ sh example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six
第一个参数为one,第五个是five


2.3 判断用户的参数
Shell 脚本中的条件测试语法可以判断表达式是否成立,若条件成立则返回数字 0,否则便返回其他随机数值。

按照测试对象来划分,条件测试语句可以分为 4 种:


➢ 文件测试语句;使用指定条件来判断文件是否存在或权限是否满足等情况的运算符。

参数列表:

-d       测试文件是否为目录类型
-e       测试文件是否存在
-f        判断是否为一般文件
-r        测试当前用户是否有权限读取
-w      测试当前用户是否有权限写入
-x       测试当前用户是否有权限执行
实例:测试是否存在aaa这个文件夹?(若存在输出为0,不存在输出非零值)

@ubuntu:~/linux_example$ [ -d /home/aaaa ]
@ubuntu:~/linux_example$ echo $?
1

➢ 逻辑测试语句;

可以结合逻辑语句输出自定义语句

例如:[ -e /home/fda ]   &&   echo  "not found"

 

➢ 整数值比较语句;

整数比较运算符

-eq       是否等于

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

实例:查询可用内存并判断是否小于1024,若小于,返回 “Insufficient Memory”

$ F=`free  -m | grep 内存 | awk '{print $4}'`
@ubuntu:~/linux_example$ echo $F
311
@ubuntu:~/linux_example$ [ $F -lt 1024 ] && echo "Insuffiocient Memory" 
Insuffiocient Memory

 

➢ 字符串比较语句。

=           比较字符串内容是否相同
!=          比较字符串内容是否不同

-z          判断字符串是否是空

 

3、流程控制语句

3.1 if条件测试语句

(1)单分支if语句主要是由if、then、fi组成。

实例:判断某文件家是否存在,并建立。

#!/bin/bash
DIR="/home/XX/linux_example/a"
if [ -e $IDR ]
then 
mkdir $DIR
fi
(2)多分支if语句主要是由if、then、else、elif、fi组成。

实例:判断用户输入的分数在哪个成绩区间内,然后输出如Excellent、 Pass、 Fail 等提示信息。

在 Linux 系统中, read 是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量, -p 参数用于向用户显示一定的提示信息。在下面的脚本示例中,只有当用户输入的分数大于等于 85 分且小于等于 100 分,才输出Excellent 字样;若分数不满足该条件(即匹配不成功),则继续判断分数是否大于等于 70 分且小于等于 84 分,如果是,则输出 Pass 字样;若两次都落空(即两次的匹配操作都失败了),则输出 Fail 字样。
#!/bin/bash
     2    read -p "Enter your grade: " Grade
     3    if [ $Grade -ge 85 ] && [ $Grade -le 100 ] 
     4    then
     5        echo "Excellet"
     6    elif [ $Grade -ge 70 ] && [ $Grade -le 84 ]
     7    then     echo "Pass"
     8    else
     9        echo "Fail"
    10    fi
 

3.2 for 条件循环语句

语句结构:

 

3.3 while条件循环

实例:结合while来洗衣歌猜测数值大小的脚本文件。

 1    #!/bin/bash
     2    PRICE=$(expr $RANDOM % 1000)
     3    TIMES=0
     4    echo "the real number id between 0-999"
     5    while true
     6    do
     7        read -p "please input your number :" INT
     8        let TIMES++
     9        if [ $INT -eq $PRICE ] ; then
    10            echo "you are right"
    11            echo "right timed g $TIMES times"
    12            exit 0
    13        elif [ $INT -gt $PRICE ] ; then
    14            echo "too high"
    15        else
    16            echo "too low"
    17        fi
    18    done
 

3.3 case条件测试语句(注意使用;;来结束某一case,使用esac来结束条件测试)

实例:使用case来判断输入的类型

 1    #! /bin/bash
     2    read -p "input a number and press Enter to ensure:" KEY
     3    case "$KEY" in
     4        [a-z][A-Z])
     5            echo "your input is alphabet"
     6            ;;
     7        [0-9])
     8            echo "your input is number"
     9            ;;
    10        *)
    11            echo "your input is other inputs "
    12    esac
 

4、计划任务服务程序

计划任务分为一次性计划任务和长期性计划任务,即只执行一次和周期性长期性执行:

➢ 一次性计划任务:今晚 11 点 30 分开启网站服务。

使用at命令来执行,一半写成“at 时间”的形式就可以,要想查看已经设置好但是没有执行的任务可以使用“at-l”命令,要想删除,可以使用“atrm 任务序号”的方式删除任务。

➢ 长期性计划任务:每周一的凌晨 3 点 25 分把/home/wwwroot 目录打包备份为backup.tar.gz。

crontab服务:

使Linux系统周期性的有规律的执行某些具体任务。

       crontab命令:

                crontab -e 创建编辑计划任务

               crontab -l 查看当前计划任务

               crontab -r 删除某项计划任务

               crontab -u 以管理员身份登录,编辑其他人的计划任务

        crontab参数格式:分,时,日,月,星期 命令  (某些参数没有设置需要使用*占位)

            分         取值为 0~59 的整数
            时         取值为 0~23 的任意整数
           日          取值为 1~31 的任意整数
            月         取值为 1~12 的任意整数
           星期      取值为 0~7 的任意整数,其中 0 与 7 均为星期日
           命令      要执行的命令或程序脚本

实例:每周135的凌晨3:25,都将使用tar命令将某网站的数据目录打包,将其作为一个备份。

25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot(使用,表示多时段,使用-表示一段连续的时间,使用/来表示任务的时间间隔)

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值