设为首页 收藏本站
查看: 1213|回复: 0

Vim编辑器-Shell脚本

[复制链接]

尚未签到

发表于 2018-8-20 09:46:39 | 显示全部楼层 |阅读模式
  一、Vim编辑器
  1.1 概念及其作用
  用于编写、修改文本,是默认已经安装在Linux上的文本编辑器,类似于windows的Word
  1.2 vim的三个工作模式
  1)命令模式:Vi/Vim 默认模式,不能输入字符,但是可以控制光标移动,关键词检索,复制,粘贴等基本功能,通过命令模式可以进入末行模式和输入模式
  2)末行模式:从命令模式上输入冒号(: )进入,可以对文本进行保存、退出、查找等操作,可通过 Esc 键退回到命令模式
  3)输入模式:通过命令模式下键入 a/i/o 进入,输入字符串、文本信息等,可通过 Esc 键退回到命令模式
  1.3 vim的编辑保存模块
  i
  在光标所在位置进行编辑;
  a
  在光标所在位置后一位进行编辑;
  o
  在光标所在位置重新启动一行进行编辑;
  :w
  保存当前编辑本文;
  :q
  退出当前编辑文本;
  :!
  强制使用
  
  1.4 vim的搜索替换模块
  /string
  自顶向下查找;
  ?string
  自底向上查找;
  :set nu
  显示行号
  :set nonu
  不显示行号
  :noh
  不高亮显示
  :set ingorecase
  开启忽略大小写;
  :set noingorecase
  关闭忽略大小写;
  :[range]s/字符串 A/字符串 B/[参数]
  用字符串B替换字符串A
  range表示范围:1,4 ----> 第一行至第四行
  $ ------> 最后一行
  %------> 全文
  参数:c ----> 每次替换前进行询问
  e ----> 不显示错误信息
  g ----> 替换一行中所有匹配项
DSC0000.jpg

  开启忽略大小写:
DSC0001.jpg

  把windows替换为Centos(注意windows是小写):
DSC0002.jpg

  交互询问:
DSC0003.jpg

  替换成功:
DSC0004.jpg

  
  1.5 vim的针对程序员模块
  :syntax on
  开启语法检查
  :set autoindent
  自动缩进,默认 8 个空格
  :set shiftwidth=4
  设置缩进字符
  注意:可以通过编辑配置/etc/vimrc 使某些针对程序员的功能自动生效
  
  1.6其他快捷命令
  h/j/k/l
  控制光标移动(左下上右)
  ^  
  将光标移至行首
  $
  将光标移至行尾
  G
  将光标移至文件尾
  gg
  将光标移至文件头
  ctrl + f
  向下翻页
  ctrl + b
  向上翻页
  u
  撤销操作
  x
  删除光标所在位置内容
  dd
  删除光标所在行
  D
  删除光标所在位置到所在行结尾
  yy
  复制光标所在行
  p
  在光标所在位置将复制或删除内容粘贴
  
  二、shell编程入门
  2.1 Shell的概念及其作用
  Shell 是一款 Linux 系统下,用于用户命令与 Linux 内核连接的软件,是一款命令解释器,能够识别用户输入的各种命令,并传递给操作系统。大多数 Linux 版本默认情况下使用的 Shell 版本是BASH。
  
  2.2 Shell 脚本
  Shell 脚本,严格上叫做 BASH 编程, 依赖于 Vim 编辑器,作为文本保存在 Linux 上,一定以.sh结尾Shell 解释器支持变量、命令行参数、交互式输入、函数模块及流控语句等
  
  2.3 Shell 编程
  2.3.1分类
  1)交互式:用户每输入一条命令,结果显示在屏幕上
  2)非交互式:用户每输入一条命令后,结果不显示在屏幕上(输出重定向)
  3)批处理:用户编写好完整shell脚本后一次执行
  
  2.3.2执行方式
  1)方式1:给脚本加上x权限并以绝对或相对路径+脚本文件执行(因为默认情况所有的命令都是通过PATH寻找命令,不加路径会通过PATH变量查找)
  [root@RHEL6 ~]# cat test.sh
  seq 3
  [root@RHEL6 ~]# ll test.sh
  -rw-r--r--. 1 root root 6 May 10 09:10 test.sh
  [root@RHEL6 ~]# chmod u+x test.sh //赋予x权限
  [root@RHEL6 ~]# ll test.sh
  -rwxr--r--. 1 root root 6 May 10 09:10 test.sh
  [root@RHEL6 ~]# ./test.sh
  1
  2
  3
  2)方式2:使用bash/sh命令+脚本文件(无需x权限)
  [root@RHEL6 ~]# chmod u-x test.sh //取消x权限
  [root@RHEL6 ~]# ll test.sh
  -rw-r--r--. 1 root root 6 May 10 09:10 test.sh
  [root@RHEL6 ~]# bash test.sh
  1
  2
  3
  
  2.3.3位置参数
  $0
  脚本的名称
  $n
  第n个位置参数
  $#
  位置参数总个数
  $*
  所有的位置参数
DSC0005.jpg

  [root@RHEL6 ~]# bash test.sh hello world
  This script is test.sh ///$0
  The parameter number is 2,they are hello world
  The first is hello ///$1
  The second is world ///$2
  
  2.4判断用户的参数
  1)两种形式:
  ① test命令:test 参数+表达式
  ② [ ]命令:[ 表达式1 参数 表达式2 ]
  2)结果:
  条件成立,返回数字0;不成立,返回(非零)随机数;保存在$?中
  2.4.1文件测试
  用于判断文件是否存在,并且是什么类型
  操作符
  作用
  -d
  测试文件是否为目录类型
  -e
  测试文件是否存在
  -f
  判断是否为一般文件
  -L
  判断是否为链接文件
  -r
  测试当前用户是否有权限读取
  -w
  测试当前用户是否有权限写入
  -x
  测试当前用户是否有权限执行
  [root@RHEL6 ~]# ls
  anaconda-ks.cfg Downloads Music Templates www.mqzzl.fun
  Desktop install.log Pictures test.sh
  Documents install.log.syslog Public Videos
  [root@RHEL6 ~]# test -f Music/
  [root@RHEL6 ~]# echo $?
  1
  [root@RHEL6 ~]# [ -w test.sh ]
  [root@RHEL6 ~]# echo $?
  0
  
  2.4.2逻辑测试(与、或、非)
  1)”与 &&”:符号两边的表达式同时成立,才是真
  [root@RHEL6 ~]# [ -d Music ] && [ -w test.sh ]
  [root@RHEL6 ~]# echo $?
  0
  [root@RHEL6 ~]# [ -e music ] && [ -w test.sh ]
  [root@RHEL6 ~]# echo $?
  1
  2)”或 ||”:符号两边的表达式有一个成立就认为是真
  [root@RHEL6 ~]# [ -e music ] || [ -w test.sh ]
  [root@RHEL6 ~]# echo $?
  0
  3)” 非 !”: 对表达式取反
  [ $USER != roo ] && echo $USER
  root
  [root@RHEL6 ~]# echo $?
  0
  
  2.4.3 整数值测试(比较大小,不能用 >  /dev/null
  if [ $? -eq 0 ]
  then
  echo "Host $1 is online"
  else
  echo "Host $1 is offline"
  fi
  [root@RHEL6 ~]# bash ping.sh 192.168.100.1
  Host 192.168.100.1 is online
  [root@RHEL6 ~]# bash ping.sh 192.168.100.2
  Host 192.168.100.2 is offline
  -------------------------------------------------------------------------------------
  [root@RHEL6 ~]# cat Grade.sh
  #!/bin/bash
  read -p "Enter your score(0-100):" GRADE
  if [ $GRADE -ge 80 ];then
  echo "The grade is excellent!!"
  elif [ $GRADE -ge 60 ]&&[ $GRADE -lt 80 ];then
  echo "The grade is pass"
  else
  echo "The grade is failure"
  fi
  [root@RHEL6 ~]# bash Grade.sh
  Enter your score(0-100):88
  The grade is excellent!!
  [root@RHEL6 ~]# bash Grade.sh
  Enter your score(0-100):59
  The grade is failure
  
  2.5.2 for语句--循环语句
  1)根据取值列表,循环执行命令,循环彻底后结束
  2)语法结构:
  for 变量 in {list}
  do
  循环体
  done
  [root@RHEL6 ~]# cat user.txt
  tom
  jack
  lilei
  lucy
  [root@RHEL6 ~]# cat for.sh
  #!/bin/bash
  for USER in `cat /root/user.txt`
  do
  id $USER &> /dev/null
  if [ $? -eq 0 ];then
  echo "$USER exists"
  else
  useradd $USER &> /dev/null
  echo "1234" | passwd --stdin $USER &> /dev/null
  if [ $? -eq 0 ];then
  echo "$USER,Create success"
  else
  echo "$USER,Create failure"
  fi
  fi
  done
  [root@RHEL6 ~]# bash for.sh
  tom exists
  jack,Create success
  lilei,Create success
  lucy exists
  
  2.5.3 while语句--循环语句
  1)用于进行条件判断,当条件不满足时,结束命令!
  2)语法结构:
  while 表达式
  do
  循环体
  done
  [root@RHEL6 ~]# cat while.sh
  #!/bin/bash
  NUMBER=$(expr $RANDOM % 1000)
  TIMES=0
  while true
  do
  read -p "Please input a number(0-999):" INT
  let TIMES++
  if [ $INT -gt $NUMBER ];then
  echo "too big"
  elif [ $INT -lt $NUMBER ];then
  echo "too small"
  else
  echo "It is right,the number is $NUMBER"
  echo "TIMES=$TIMES"
  exit 0
  fi
  done
  Please input a number(0-999):959
  too small
  Please input a number(0-999):960
  It is right,the number is 960
  TIMES=2
  
  2.5.4 case语句--判断语句
  1)用于对条件表达式进行判断,执行满足条件表达式的语句
  2)语法结构:
  case 变量 in
  条件表达式 1)
  语句;;
  条件表达式 2)
  语句;;
  *)
  语句;;
  esac
  [root@RHEL6 ~]# cat case.sh
  #!/bin/bash
  read -p "Please input a char:" KEY
  case $KEY in
  [a-z]|[A-Z])
  echo "This is a char"
  ;;
  [0-9])
  echo "This is a num"
  ;;
  *)
  echo "This is a special char"
  esac
  [root@RHEL6 ~]# bash case.sh
  Please input a char:9
  This is a num
  [root@RHEL6 ~]# bash case.sh
  Please input a char:h
  This is a char
  [root@RHEL6 ~]# bash case.sh
  Please input a char:!
  This is a special char


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-554120-1-1.html 上篇帖子: shell脚本 - 日期比较与判断 下篇帖子: shell 取出UID大于200的用户信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表