2021-05-07

【●】Shell脚本编辑
一、shell环境及特性
  1.shell
  ●在linux内核与用户之间的解释器程序
   —通常指    /bin/bash 
   —负责向内核翻译及传送用户/程序指令
   —相当于系统的“外壳”
  2.shell的使用方式
   ●交互式      ——命令行
    —人工干预、智能化程度高
    —逐条解释执行、效率低
    ●非交互式      ——脚本
    —需要提前设计、智能化难度大
    —批量执行、效率高
    —方便在后台静悄悄地运行
  3.常见的shell程序种类
   如何切换shell环境
   —通过usermod、chsh更换登录shell
   —手动执行目标shell程序
   用户(root)---bash---sh
  ●cat   /etc/shells       # 查看系统中所有的解释器   
   [root@svr7 ~]# cat   /etc/shells 
   /bin/sh                                   #多数Unix默认的shell
   /bin/bash                               #多数linux默认使用的shell
   /sbin/nologin                        #非登录shell
   /usr/bin/sh
   /usr/bin/bash
  /usr/sbin/nologin
  /bin/tcsh
  /bin/csh
  4.Bash基本特性
 ●命令行环境回顾
   —tab键补全、历史命令、 快捷键、别名、重定向、管道符(管道操作)
 
二、脚本构成及执行
  1.shell脚本
  ●提前写好可执行语句,能够完成特定任务的文件
   —顺序、批量化处理
   —解释型程序
  2.规范的脚本构成
   —声明解释器
       #   !/bin/bash(使用哪种解释器 、写在脚本第一行)
   —编写注释
       #编写步骤、思路、脚本功能、作者信息、变量作用等内容   
   —执行指令
   [root@svr7 ~]# vim  /root/first.sh 
    #!/bin/bash
    #这是第一个测试脚本
    echo  "Hellow World"
    echo   "abc"
 3.脚本创建“三步走”
    —1.     新建文本文件
    —2.     添加可执行的脚本语句(命令行)
    —3.     添加 x 执行权限
   [root@svr7 ~]# vim  /root/first.sh                 #1.建文件
   echo  "Hello World"                                        #2.写脚本语句
   [root@svr7 ~]#chmod  u+x   /root/first.sh       #3.加执行权限
   [root@svr7 ~]# /root/first.sh 
   Hello World
  4.shell脚本执行方式 
    —1.     添加x权限 ,使用绝对路径或相对路径执行
      [root@svr7 opt]# chmod u+x  test01.sh
      [root@svr7 opt]# /opt/test01.sh
    —2.    使用解释器执行脚本,无需x权限(开启子进程,父进程不作任何操作)
      [root@svr7 opt]# bash test01.sh
    —3.使用source  命令执行脚本,无需x权限(不开启子进程,父进程进行操作)
      [root@svr7 opt]# source  test01.sh
三、简单脚本应用
  1.快速配置yum仓库
    [root@svr7 opt]# vim test03.sh
    #!/bin/bash
    #部署yum仓库
    mount  /dev/cdrom  /mydvd
    rm -rf  /etc/yum.repos.d/*.repo
    echo "[abc]
    name=xxx
    baseurl=file:///mydvd
    enabled=1
    gpgcheck=0 " > /etc/yum.repos.d/abc.repo
   [root@svr7 opt]# bash test03.sh
   [root@svr7 opt]# yum repolist 
 2.编写脚本,安装http服务,需要开机自启并且主页显示内容为“web-test~~~”
   [root@svr7 opt]# vim  /opt/test04.sh
    #!/bin/bash
    yum -y install httpd
   echo "web-test~~~" > /var/www/html/index.html   #定义主页内容
   systemctl restart  httpd    #开服务
   systemctl enable   httpd   #设置开机自启

   之后使用 bash  test04.sh   执行脚本
   curl  192.168.4.7   可以看到页面内容
 ◆ 编写脚本,开启ftp服务,并实现开机自启
yum -y install vsftpd &> /dev/null   //安装ftp,不显示任何信息,dev下
的null相当于黑洞,不需要的信息都可以扔到里面让其消失。
   [root@svr7 opt]# vim test05.sh
    #!/bin/bash
    yum -y install vsftpd &> /dev/null             #装包,忽略输出
    systemctl restart vsftpd                               #起服务
    systemctl enable vsftpd                              #设为开机自运行
   [root@svr7 opt]# bash test05.sh
   >         正确信息重定向
   2>       错误信息重定向
   &>      所有信息重定向

四、条件测试,可以为脚本赋予智能判断的效果
  ●  使用格式:1. test    表达式           2.  [表达式]
  ●  测试方式: 
   — 1.对字符串进行测试
  ◆ ==  判断两边是否相等               !=    判断两边是否不相等
   echo $?   查询上条测试是否正确
   [root@svr7 opt]# test a == a     #使用常量判断,再用echo$?测试结果
   [root@svr7 opt]# echo $?
    0
   [root@svr7 opt]# [ a == a ]
   [root@svr7 opt]# echo $?
    0
   [root@svr7 opt]# test a == b
   [root@svr7 opt]# echo $?
    1
   [root@svr7 opt]# [ a == b ]
   [root@svr7 opt]# echo $?
    1
   [root@svr7 opt]# [ $a == $b ]          #使用变量判断两个变量的值是否相等                                                                  ,再用echo$?测试结果
   [root@svr7 opt]# echo $?
    1
   [root@svr7 opt]# [ $a != $b ]
   [root@svr7 opt]# echo $?
    0
 ◆  -z   判断变量是否为空                   !  -z    判断变量是否非空
   [root@svr7 opt]# echo $a 
    2
   [root@svr7 opt]# [ -z $a ]      #判断变量a是否为空,如果为空则判断正确反                                                       之判断错误
   [root@svr7 opt]# echo $?
    1
   [root@svr7 opt]# [ ! -z $a ]    #判断变量a是否有值,有值则判断正确反                                                             之判断错误
   [root@svr7 opt]# echo $?
    0

   — 2.逻辑符号
      &&: 之前指令执行成功才会执行之后指令
       ||:    之前指令执行失败才会执行之后指令
    #!/bin/bash
    [ $USER == root ] || exit     #如果用户不是管理员就退出
    [ $USER  != root ] || exit      #如果用户不是管理员就退出  
    yum -y install vsftpd             
    systemctl restart vsftpd
    systemctl enable vsftpd

    #!/bin/bash
    read -p "请输入用户名称:" n
   [ -z $n ] &&    exit                       #判断用户名为空的话就退出脚本
   useradd  $n
   stty -echo
   read -p "请输入密码:" m
   stty  echo
   echo "$m" | passwd --stdin $n
  ●  上述是1个逻辑符号的使用情况,但有时需求比较复杂可能需要2个逻辑符号组合,那么使用后效果可以按以下方式检测:
   ◆   touch a b c
   ◆   ls a  &&  ls b  &&  ls c  //结果是都显示,第一个ls执行成功,然后导致第二个ls也执行,并且可以成功,这样的话第一个和第二个任务都成功了,那么这个组合就算成功,然后会导致第二个逻辑符号&&后面的ls c 也执行并且成功。

   ◆   ls a  ||  ls b  ||  ls c  //结果是显示a,第一个ls执行成功,第二个ls就不会执行了,这两个任务中间是|| ,那么只要有一个成功就算这个组合执行成功,由于这个组合算成功,所以就不会执行第二个||后面的任务了

   ◆    ls a  &&  ls b  ||  ls c  //结果是显示a和b,第一个ls执行成功,然后导致第二个ls也执行,并且可以成功,这样的话第一个和第二个任务都成功了,那么这个组合就算成功,但是由于第二个逻辑符号是||,就不会执行最后的ls c任务了

   ◆     ls a  ||   ls b  &&  ls c  //结果是显示a和c,第一个ls执行成功,第二个ls就不会执行了,这两个任务中间是|| ,那么只要有一个成功就算这个组合执行成功,所以就会导致第二个逻辑符号&&后面的ls c执行                   

  ◆    再次修改脚本:
       #!/bin/bash
        read -p "请输入用户名称:" n
        [ -z $n ] && echo "你倒是给个名字阿!" && exit   //退出前添加提示
        useradd $n
        stty -echo
        read -p "请输入密码:" m
        echo
        stty echo
        echo "$m" | passwd --stdin $n

   —3. 数字
    -eq    是否相等      -ne   是否不等       -gt   是否大于    -lt      是否小于
    -ge    是否大于等于          -le    是否小于等于
  [ 1 -eq 1 ]              #判断 1 是否等于 1
  [ 3 -ge 5]              #判断 3 是否大于等于 1                            
   a=10    
   b=20
   [ $a -ne $b ]       #判断变量a 是否不等于变量b

   — 4.  文件
    -e     判断文件是否存在,若存在则结果为真
    -f      判断文件是否存在,必须是普通文件
    -d     判断文件是否存在,必须是目录
    -r      判断当前用户对文件是否有读权限, 对root无效
    -w    判断当前用户对文件是否有写权限, 对root无效
    -x     判断当前用户对文件是否有可执行权限, 对root无效(目录是否可以进入)
      [root@svr7 opt]#   [ -d /etc/hosts ]  
      [root@svr7 opt]#echo $?                #目录/etc/hosts存在,测试成立
       0                                                   
 
 ◆  编写脚本,每2分钟检查服务器登录账户数量,如果超过3人发邮件通知管理员
   [root@svr7 opt]# vim test01.sh
   #!/bin/bash
   n=$(who | wc -l)     #n里面存储了登录数量
   [ $n -gt 3 ] && echo "服务器被入侵!狼来了!"   |  mail -s test root     #//用n和3对比,如果超过3就发邮件
   [root@svr7 opt]# chmod +x test01.sh   #脚本写完后,赋予x权限
   [root@svr7 opt]# crontab -e                   #编写计划任务
   */2 * * * *  /opt/test01.sh                         #每2分钟执行脚本,然后保存退出
只要目前超过3人登录系统,那么每隔2分钟就会收到邮件,使用mail命令查看邮件
    [root@svr7 opt]# rm /var/spool/mail/root   #清空所有邮件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值