• 【第一章】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可以做任何事(一切取决于业务需求)

  • 相关阅读:
    【前端优化之拆分CSS】前端三剑客的分分合合
    ipad&mobile通用webapp框架前哨战
    如何判断一个DOM元素正在动画,一个CSS“阻塞”JS的例子
    关于前端框架升级与全站样式替换的简单建议
    【HTML5&CSS3进阶04】CSS3动画应该如何在webapp中运用
    【HTML5&CSS3进阶03】Jser与Csser如何一起愉快的翻新老组件
    【HTML5&CSS3进阶学习02】Header的实现·CSS中的布局
    【HTML5&CSS3进阶学习01】气泡组件的实现
    【模块化编程】理解requireJS-实现一个简单的模块加载器
    【小贴士】探一探javascript中的replace
  • 原文地址:https://www.cnblogs.com/yangleitao/p/9166601.html
Copyright © 2020-2023  润新知