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

 

posted @ 2018-06-11 14:59  旅行者-Ylt  阅读(315)  评论(0编辑  收藏  举报