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

【第一章】Shell 概述的更多相关文章

  1. 第一章 数据库概述、MySQL的安装和配置

      第一章 数据库概述.MySQL的安装和配置   1.为什么要使用数据库 最早是纸质文件来存储数据 缺点:不易保存,占用空间大 计算机出现以后,采用软件来进行保存(excel) 缺点:容易损坏 文件 ...

  2. Laxcus大数据管理系统2.0(2)- 第一章 基础概述 1.1 基于现状的一些思考

    第一章 基础概述 1.1 基于现状的一些思考 在过去十几年里,随着互联网产业的普及和高速发展,各种格式的互联网数据也呈现爆炸性增长之势.与此同时,在数据应用的另一个重要领域:商业和科学计算,在各种新兴 ...

  3. [OpenGL红宝书]第一章 OpenGL概述

    第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向Op ...

  4. 数据结构(Java语言描述)-第一章:概述

    第一章 概述 1.0 序言 自己为啥要学数据结构嘞,我觉得主要有以下三个原因: 前段时间在看并发编程时,发现aqs,corrunthashmap等底层都用到了数据结构,主要的有队列,还有链表,学习数据 ...

  5. C#本质论读书笔记:第一章 C#概述|第二章 数据类型

    第一章 1.字符串是不可变的:所有string类型的数据,都不可变,也可以说是不可修改的,不能修改变量最初引用的数据,只能对其重新赋值,让其指向内存中的一个新位置. 第二章 2.1 预定义类型或基本类 ...

  6. Struts2框架学习第一章——Struts2概述

    本章要点 —  Web应用的发展 —  Model 1和Model 2 —  MVC思想 —  MVC模式的优势 — 常用MVC框架及其特征 —  Struts 1的基本结构及其存在的问题 —  We ...

  7. 第一章 JQuery概述

    1.JQuery的作用:访问和操作DOM元素控制页面样式对页面事件进行处理扩展新的JQuery插件与Ajax技术完美结合注:JQuery能完成的效果js都能完成,但是JQuery的开发效率更高,代码更 ...

  8. C# 本质论 第一章 C#概述

    学习新语言最好的办法就是动手写代码. 库(或称为类库)的文件扩展名是.dll,其中dll代表"动态链接库(Dynamic Link Library)". 不要在标识符中使用单词缩写 ...

  9. Java第一章----Java概述+环境搭建

    写在前面的话: Java基础的东西看过好几遍,但是过一段都就忘记了,所以这次我决定花费一些时间整理一个系列博客供以后方便查阅.此系列根据Java编程思想+Java核心技术两本书整理而来,这两本书也是我 ...

  10. 第一章 C++概述

    第一节 C++语言的发展历史 略 第二节 C++语言的特点 1.C++是一种面向对象的程序设计语言,其中的新技术主要包括: 抽象数据类型 封装和信息隐蔽 以继承和派生方式实现程序的重用 以运算符重载和 ...

随机推荐

  1. react系列(二)高阶组件-HOC

    高阶组件 简单来说,高阶组件可以看做一个函数,且该函数接受一个组件作为参数,并返回一个新的组件. 我在之前的博客<闭包和类>中提到一个观点,面向对象的好处就在于,易于理解,方便维护和复用. ...

  2. UE4 Navmesh 室内导航设置

    我用的UE版本是4.14.1   系统:win10 64 前不久给样板房里面做了一个扫地机器人,导航设置让我头大了很久,度娘也没有用,最后在谷哥上有所感悟,现在给出本人的设置过程和解决方案. 一开始拖 ...

  3. 【HDOJ 1285】确定比赛名次(拓扑排序+优先队列)

    Problem Description有N个比赛队(1<=N<=500),编号依次为1,2,3,....,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员 ...

  4. 简单的反编译class文件并重新编译的方法

    在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...

  5. Cobbler实现自动化安装(上)--原理篇

    了解Cobbler之前,我们需要先对PXE及KickStart有一定的认识. PXE PXE(Pre-bootExecution Environment),预启动执行环境,通过网络接口启动计算机,支持 ...

  6. python环境Anaconda的安装

    本人最开始的的环境为:win10 + 32位的python 最近想学习一下爬虫,听说某些库需要64的python才能实现(本人也是小白,只是平时喜欢折腾,这里是听说,暂时没有能力解释),无奈之下只好卸 ...

  7. 浏览器端用JS实现创建和下载图片

    问题场景 在前端很多的项目中,文件下载的需求很常见.尤其是通过JS生成文件内容,然后通过浏览器端执行下载的操作.如图片,Execl 等的导出功能.日前,项目中就遇到了这类需求,在浏览器端实现保存当前网 ...

  8. canvas+javascript实现淘宝商品放大镜效果

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. redis的docker化安装

    只需要关注几点: 端口映射 配置文件映射 持久化映射 要做的就是拉取官方镜像并把关注的几个点处理一下就好了: docker pull redis docker run -d -p : -v /data ...

  10. mfc和qt的区别

    注:引用来源 http://wenda.chinabaike.com/b/30934/2013/1208/707410.html QT使用的编译器是MinGW,即Linux下的GCC移植到window ...