zoukankan      html  css  js  c++  java
  • 【第一章】Shell 概述

    一、什么是Shell?

    • shell是一个命令解释器,它不仅包含大量的命令以实现操作系统的对话,还可以实现定义变量、条件判断、循环控制、函数调用等功能。
    • 作用解释执行用户输入的命令及程序等。
    • 从键盘输入一条命令,立即得到回应的方式,称为交互式方式

    二、如何查看shell?

    • 查看当前系统安装了那些Shell
    [root@host-131 ~]# cat /etc/shells 
    /bin/sh     #这是Bourne Shell。
    /bin/bash   #这是Bourne Again Shell
    /sbin/nologin    #这并不是Shell而是指“无法登陆”
    [root@host-131 ~]#

     [root@host-131 ~]# chsh -l    #它实际也是查看的/etc/shells的内容

     /bin/sh
     /bin/bash
     /sbin/nologin

    • 查看linux系统默认的Shell?
    [root@host-131 ~]# echo $SHELL    #SHELL必须的大写
    /bin/bash
    [root@host-131 ~]# grep ^root /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    • 用cash来改变shell

    首先查系统有那些shell,然后找到想要切换shell的绝对路径:
    [root@host-131 ~]# which tcsh
    /usr/bin/tcsh
    切换到指定shell: [root@host
    -131 ~]# chsh -s /bin/tcsh Changing shell for root. Shell changed.、 chsh修改的位置: [root@host-131 ~]# cat /etc/passwd|grep ^root root:x:0:0:root:/root:/bin/tcsh 切回到默认shell: [root@host-131 ~]# chsh -s /bin/bash Changing shell for root. ^[[AShell changed. [root@host-131 ~]# cat /etc/passwd|grep ^root root:x:0:0:root:/root:/bin/bash [root@host-131 ~]#

    三、什么是shell脚本?

    • 当命令或者程序语句不在命令行下执行,而是通过一个程序文件来执行时,改程序就被称为 shell 脚本
    • 如果在Shell脚本里内置了很多条命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式
    • 用户可以在Shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机地结合起来,就形成了一个功能强大的Shell脚本

     范例1:写一个判断登录指定用户的脚本。

    #!/bin/bash
    #执行操作前确定系统登录用户是否正确
    curr_user=`whoami`
    if [ "$curr_user" != "betadmin" ]
    then
       echo "本脚本只允许使用betadmin用户执行!"
       echo "脚本退出,请登录正确的用户"
       exit 1
    fi

    范例2:写一个登录指定用户,清除/var/log下message日志文件的shell脚本。

    #!/bin/bash
    #清除日志脚本
    #必须要使用root用户才可以清除log
    LOG_DIR=/var/log
    ROOT_UID=0    #$UID为0的用户,即为root用户
    #判断是否为ROOT用户
    if [ "$UID" -ne "$ROOT_UID" ]
        then
            echo "需要登录root用户才能执行此脚本"
        exit 1
    fi
    #如果切换到指定目录不成功,则给出提示,并终止程序运行。
    cd $LOG_DIR || {
        echo "不能进入到指定目录"
        exit 1
    }
    #通过以上判断,我们确定用户权限和路径正确,然后只有清理成功,才能打印提示。
    cat /dev/null>messages && {
        echo "Log cleand up."
        exit 0 #退出返回0表示成功,返回1表示失败。
    }

    拓展:清空日志及文件的三种方法:

    [root@host-131 ~]# echo > test.log 
    
    [root@host-131 ~]# >test.log 
    
    [root@host-131 ~]# cat /dev/null >test.log 

    四、 Shell能做什么?

    1. 自动化批量系统初始化程序 (update,软件安装,时区设置,安全策略...)

    2. 自动化批量软件部署程序 (LAMP,LNMP,Tomcat,LVS,Nginx)

    3. 应用管理程序 (KVM,集群管理扩容,MySQL,DELLR720批量RAID)

    4. 日志分析处理程序(PV, UV, 200, !200, top 100, grep/awk)

    5. 自动化备份恢复程序(MySQL完全备份/增量 + Crond)

    6. 自动化管理程序(批量远程修改密码,软件升级,配置更新)

    7. 自动化信息采集及监控程序(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)

    8. 配合Zabbix信息采集(收集系统/应用状态信息,CPU,Mem,Disk,Net,TCP Status,Apache,MySQL)

    9. 自动化扩容(增加云主机——>业务上线)

    zabbix监控CPU 80%+|-50% Python API AWS/EC2(增加/删除云主机) + Shell Script(业务上线)

    10. 俄罗斯方块,打印三角形,打印圣诞树,打印五角星,运行小火车,坦克大战,排序算法实现

    11. Shell可以做任何事(一切取决于业务需求)

  • 相关阅读:
    C# 手机号码隐藏中间四位
    mysql-8.0.20-winx64 绿色版安装教程
    C# 钩子函数使用
    C#反射机制学习
    docker学习笔记二
    从主机A得到id_rsa.pub文件,在主机B创建用户danny加入该文件,实现主机A免密登录主机B
    关于mysql远程登录问题
    playframework 编译打包过程失败
    docker学习笔记一
    记一次tomcat7.0版本启动项目失败问题
  • 原文地址:https://www.cnblogs.com/yangleitao/p/9166601.html
Copyright © 2011-2022 走看看