一、什么是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可以做任何事(一切取决于业务需求)

最新文章

  1. Java线程中带有返回值的线程Callable
  2. 利用C++不使用递归,循环和goto,打印1到100 的某一答案分析
  3. Android--SQLite的使用
  4. 【Xamarin笔记】Events, Protocols and Delegates
  5. 收集一些java相关的文章
  6. 【extjs】 Extjs中的Ext.grid.Panel隐藏列会显示在表头中解决方法
  7. 创建parameter id
  8. 使用VNC完毕远程调用图形化
  9. 联合县城市,采用ajax,而使用ul模拟select下拉
  10. Vuex给我们的.vue文件结构带来了这些变化
  11. crontab的定时任务不能自动执行,但是手动执行脚本一直能成功
  12. java web 学习笔记 jsp内置对象
  13. Hibernate【inverse和cascade属性】知识要点
  14. Spring AOP使用注解记录用户操作日志
  15. linux批量替换文件内容3种方法(perl,sed,shell)
  16. 【Java安装】配置环境变量
  17. set 与 map 的第一次尝试
  18. vue2.0 移动端,下拉刷新,上拉加载更多插件,修改版
  19. 【python】抄写爬淘宝已买到的宝贝的代码
  20. 2017.10.6 QBXT 模拟赛

热门文章

  1. 微信小程序获取手机信息
  2. 使用canvas输出base64_url
  3. oracle sqldrl命令与以及ctl文件
  4. LightOJ 1118--Incredible Molecules(两圆相交)
  5. angularjs脏机制
  6. Elasticsearch 聚合操作
  7. Python学习:11.Python装饰器讲解(二)
  8. PAT (Basic Level) Practice 1008 数组元素循环右移问题
  9. 数组循环左移 i 位
  10. Java虚拟机(JVM)内存区域