冰恋 发表于 2018-8-22 11:22:05

第四节 Vim编辑器--Shell脚本

  本节课内容:
  1.Vim编辑器
  2.Shell脚本入门
  3.定时任务(计划任务----atcrontab)
  一、Vim编辑器   默认安装在Linux上的
  作用:编写 修改文档
  Vim有三个工作模式:
  1.命令模式:控制光标的移动   对文本进行复制查找 删除 和粘贴
  2.输入模式:正常录入文本信息
  3.末行模式:保存和退出文档有效标记环境
  命令模式:
  删除一行 光标指定 按 dd 删除删除多行[数字]dd
  复制一行光标指定啊 按p   可以把你复制的和删除的都粘贴过来
  撤销 按u
  输入模式:
  从命令模式 a i o进入输入模式
  a:进入输入模式 并且光标后移一位
  i:进入输入模式 光标不动
  o:进入输入模式 重起一行
  vi编辑器vim是vi的升级版
  末行模式:
  命令行按 :进入
  w 保存      q 退出    !强制
  :set nu                     显示行号
  :set nonu                不显示行号
  :命令                     执行该命令
  :整数                     跳转到该行
  :s/one/two             将当前光标所在行的第一个one替换成two
  :s/one/two/g         将当前光标所在行的所有one替换成two
  :%s/one/two/g      将全文中的所有one替换成two
  ?字符串                  在文本中从下至上搜索该字符串
  /字符串                   在文本中从上至下搜索该字符串
  /string自顶向下查找;
  ?string自底向上查找;
  :set ingorecase开启忽略大小写;
  :set no ingorecase关闭忽略大小写;
  :s/字符串A/字符串B/[参数]
  range表示范围:1,4--->第一行至第四行;
  $---->最后一行;
  %---->全文;
  字符串A:被B替换的字符串;
  参数:
  c---->每次替换前进行询问;
  e---->不显示错误信息;
  g---->替换一行中所有匹配项;
  针对程序员模块:
  :syntax on开启语法检查;
  :set auto indent自动缩进,默认8个空格;

  :set shift>  可以通过编辑配置/etc/vimrc使某些针对程序员功能自动生效。
  其他快捷命令:
  ^            将光标移至行首;
  $            将光标移至行尾;
  G             将光标移至文件尾;
  gg            将光标移至文件头;
  ctrl +f      向下翻页;
  ctrl + b       向上翻页;
  u            撤销操作;
  x               删除光标所在位置内容;
  dd             删除光标所在行;
  D            删除光标所在位置到所在行结尾;
  yy             复制光标所在行;
  p            在光标所在位置将复制或删除内容粘贴
  配置主机名/etc/hosts文件,为了便于局域网内管理某台特定主机
  # vim /etc/hosts
  192.168.1.200wdw.com wdw
  配置一下网卡信息和DNS信息
  Vim /etc/resolve.conf----配置DNS   这个文件是用来存放DNS配置 的网卡配置的DNS会在这同步 ,这写 的不会在网卡同步
  # vim /etc/resolv.conf
  nameserver 8.8.8.8
  # nslookup www.baidu.com 解析百度的地址
  二、Shell编程
  shell就是翻译   将命令翻译给内核
  交互式:用户每输入一条命令立即执行---->不进行重定向就是显示在屏幕
  非交互式:输出重定向
  批处理:用户编写好完整shell脚本一次执行
  1.脚本文件文件一定以.sh结尾
  #/bin/bash   #是注释   第一行注释shell版本   一般第二行注释脚本要做的事
  pwd
  ls -al
  写完有俩种错误:
  第一种:
  # nvli.sh
  -bash: nvli.sh: command not found   路径不正确
  默认情况所有的命令都是通过PATH寻找命令
  第二种:
  # . /nvli.sh
  -bash: /nvli.sh: No such file or directory   权限不够
  -rw-r--r--.1 root root    22 May 18 20:50 nvli.sh
  # chmod u+x nvli.sh
  也可以bash/sh来执行
  2.接收用户的参数
  $是shell里的保留字   $# 是统计个数

  #/bin/bash
  echo "name=$0"
  echo "come to=$# they are $*"
  echo "No1=$1 No4=$4"
  ~
  # ./nvli.sh one two tree four five six seven
  name=./nvli.sh
  they are one two tree four five six seven
  No1=one No4=four
  形参和实参的传递
  3.判断用户的参数条件
  成立返回数字0条件不成立返回(非零)随机数
  判断语句:两种形式
  test命令!----> test参数表达式
  []命令----> [表达式 1 参数 表达式 2]
  判断种类:
  1.文件测试---判断文件是否存在,并且是什么类型
  操作符             作用
  -d               测试文件是否为目录类型
  -e               测试文件是否存在
  -f                判断是否为一般文件
  -L               链接文件
  -r               测试当前用户是否有权限读取
  -w             测试当前用户是否有权限写入
  -x            测试当前用户是否有权限执行
  # test -f nvl.sh
  # echo $?                  $?输出判断结果
  1
  # [ -L nvli.sh ]
  # echo $?
  1
  2.逻辑测试   与或非
  与&&符号两边的表达式同时成立才是真
  或||            有一个成立就是真
  非!             对表达式取反
  3.整数值测试:比较大小不能用> < =
  操作符      作用
  -eq      是否等于
  -ne      是否不等于
  -gt      是否大于
  -lt         是否小于
  -le      是否等于或小于
  -ge       是否大于或等于
  4.字符串测试:比较区别
  操作符       作用
  =         比较字符串内容是否相同
  !=          比较字符串内容是否不同
  -z          判断字符串内容是否为空
  5.流量控制语句
  5.1. if

  DNS=&quot;/WDW&quot;
  if [ ! -e $DNS ]
  then
  mkdir -p $DNS
  fi
  ~
  ~
  ping -c 2 -W 3 $1 &> /wdw/wdw         &---后台运行
  if [$? -eq 0 ]
  then
  echo &quot;Host $1 is online&quot;
  else
  echo &quot;be not online&quot;
  echo &quot;error&quot;
  fi
  ~
  echo &quot;name=$0&quot;
  echo &quot;come to=$# they are $*&quot;
  echo &quot;No1=$1 No4=$4&quot;
  if [ $1 != one ]
  then
  echo &quot;error&quot;
  elif [ $1 = two]
  then
  echo &quot;correct&quot;
  else
  echo &quot;really&quot;
  5.2. cose   判断语句

  #/bin/bash
  read -p &quot;possbly is :&quot;KEY      --读取从键盘输入的内容   给一个名字
  case &quot;$KEY&quot; in
   | )                      单括号内是一个判断
  echo &quot;This is char&quot;
  ;;                                       结束一个判断
  )
  echo &quot;This is number&quot;
  ;;
  *)                                          * 表示其他
  echo &quot;This is other&quot;
  esac
  5.3. for

  #/bin/bash
  read -p &quot;input a password :&quot; PASSWD
  for USER in `cat users.txt`
  do
  id $USER &> /null
  if [ $? -eq 0 ]
  then
  echo &quot;Exist&quot;
  else
  useradd $USER &> /null
  echo &quot;$PASSWD&quot; | passwd --stdin $USER &> /null
  if [ $? -eq 0]
  then
  echo &quot;$USER,creation success&quot;
  else
  echo &quot;$USER,creation failure&quot;
  fi
  fi
  done
  5.3.while
  进行条件判断,当条件不满足时结束!

  #/bin/bash
  NUMBER=$(expr $RANDOM % 1000)       #RANDOM 是产生随机数的环境变量
  TIME=0 #Counter                                       expr命令是一个手工命令行计数器,用于在UNIX/LINUX下求表达式变量的值,一般用于整数值,也可用于字符串echo &quot;number between0-999 : &quot;
  whiletrue
  do
  read -p &quot;input a number :&quot; INT
  let TIME++
  if [ $INT -eq $NUMBER ] ; then
  echo &quot;Right ,number=$NUMBER&quot;
  echo &quot;Time=$TIME&quot;
  echo 0
  elif [ $INT -gt $NUMBER] ; then
  echo &quot;big&quot;
  else
  echo &quot;small&quot;
  fi
  done
  三、定时任务
  3.1.计划任务:分为一次性和长期性--在指定的时间段自动启动或者停止某些服务或者命令,实现自动化运维
  1.一次性任务 :at时间---设定
  # at 10:00
  at> /etc/init.d/httpd restart          ctel +D结束
  # at -l      #查看
  3    2018-05-19 10:00 a root
  # atrm 3   #删除
  # at -l
  #
  2.长期性任务:默认使用crond服务
  crontab -e 添加 编辑计划任务
  crontab -u 编辑他人的任务(root使用)

  字段      说明
  分钟       取值为0~59的整数
  小时       取值为0~23的任意整数
  日期       取值为1~31的任意整数
  月份       取值为112的任意整数
  星期       取值为0~7的任意整数,其中0与7均为星期日
  命令      要执行的命令或程序脚本
  例:每周1 3 5 凌晨3:25 使用tar,对网站数据打包
  # crontab -l
  25 3 * * 1,3,5/usr/bin/tar -czvf yellow.tar.qz /ver/www/html
  星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  用(,)逗号表示多个时间段8,9,12
  用(-)减号表示一段时间8-12--->8 9 10 11 12
  正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
  分字段必须要有数值的 不能为空或0 (*/1)    日期和星期不能同时使用
  tar
  -c: 建立压缩档案
  -x:解压
  -t:查看内容
  -r:向压缩归档文件末尾追加文件
  -u:更新原压缩包中的文件
  以上五个是独立的命令参数,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。
  -z:有gzip属性的gz
  -j:有bz2属性的   bz2
  -J :有xz属性的   xz
  -Z:有compress属性的
  -v:显示所有过程
  -O:将文件解开到标准输出
  下面的参数-f是必须的
  -f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。
  # tar -cf all.tar *.jpg
  这条命令是将所有.jpg的文件打成一个名为all.tar的包。-c是表示产生新的包,-f指定包的文件名。

页: [1]
查看完整版本: 第四节 Vim编辑器--Shell脚本