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