
一、什么是Shell?
- shell是一个命令解释器,它不仅包含大量的命令以实现操作系统的对话,还可以实现定义变量、条件判断、循环控制、函数调用等功能。
- 作用:解释执行用户输入的命令及程序等。
- 从键盘输入一条命令,立即得到回应的方式,称为交互式方式。
二、如何查看shell?
- 查看当前系统安装了那些Shell
[root@host- ~]# cat /etc/shells
/bin/sh #这是Bourne Shell。
/bin/bash #这是Bourne Again Shell
/sbin/nologin #这并不是Shell而是指“无法登陆”
[root@host- ~]#
[root@host-131 ~]# chsh -l #它实际也是查看的/etc/shells的内容
/bin/sh
/bin/bash
/sbin/nologin
- 查看linux系统默认的Shell?
[root@host- ~]# echo $SHELL #SHELL必须的大写
/bin/bash
[root@host- ~]# grep ^root /etc/passwd
root:x:::root:/root:/bin/bash
用cash来改变shell
首先查系统有那些shell,然后找到想要切换shell的绝对路径:
[root@host- ~]# which tcsh
/usr/bin/tcsh
切换到指定shell:
[root@host- ~]# chsh -s /bin/tcsh
Changing shell for root.
Shell changed.、
chsh修改的位置:
[root@host- ~]# cat /etc/passwd|grep ^root
root:x:::root:/root:/bin/tcsh
切回到默认shell:
[root@host- ~]# chsh -s /bin/bash
Changing shell for root.
^[[AShell changed.
[root@host- ~]# cat /etc/passwd|grep ^root
root:x:::root:/root:/bin/bash
[root@host- ~]#
三、什么是shell脚本?
- 当命令或者程序语句不在命令行下执行,而是通过一个程序文件来执行时,改程序就被称为 shell 脚本。
- 如果在Shell脚本里内置了很多条命令、语句及循环控制,然后将这些命令一次性执行完毕,这种通过文件执行脚本的方式称为非交互的方式。
- 用户可以在Shell脚本中敲入一系列的命令及命令语句组合。这些命令、变量和流程控制语句等有机地结合起来,就形成了一个功能强大的Shell脚本。
范例1:写一个判断登录指定用户的脚本。
#!/bin/bash
#执行操作前确定系统登录用户是否正确
curr_user=`whoami`
if [ "$curr_user" != "betadmin" ]
then
echo "本脚本只允许使用betadmin用户执行!"
echo "脚本退出,请登录正确的用户"
exit
fi
范例2:写一个登录指定用户,清除/var/log下message日志文件的shell脚本。
#!/bin/bash
#清除日志脚本
#必须要使用root用户才可以清除log
LOG_DIR=/var/log
ROOT_UID= #$UID为0的用户,即为root用户
#判断是否为ROOT用户
if [ "$UID" -ne "$ROOT_UID" ]
then
echo "需要登录root用户才能执行此脚本"
exit
fi
#如果切换到指定目录不成功,则给出提示,并终止程序运行。
cd $LOG_DIR || {
echo "不能进入到指定目录"
exit
}
#通过以上判断,我们确定用户权限和路径正确,然后只有清理成功,才能打印提示。
cat /dev/null>messages && {
echo "Log cleand up."
exit #退出返回0表示成功,返回1表示失败。
}
拓展:清空日志及文件的三种方法:
[root@host- ~]# echo > test.log [root@host- ~]# >test.log [root@host- ~]# 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可以做任何事(一切取决于业务需求)