shell介绍

                                 作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一:学好shell的3个基本条件:
1.vi/vim编辑器的熟练使用,ssh终端及“.vimrc"的设置等等需要搞熟练;
2.命令基础:Linux150个常用命令的熟练使用,这个我会再“每天一个linux命令”中陆续给大家更新,当然,得我自己抽下班的时间;
3.常见linux网络服务部署及拍错,例如:crond.nfs,inotofy,lamp,lnmp,sesync,ssh等.
二.在学习shell之前,我们要了解一下Shell
1.shell是一个命令解释器,它在操作系统的最外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即得到shell的回应),或非交互(脚本)的方式
 
2.下面的图中黄色部分就是命令解释器shell处于操作系统的位置:

提示:shell英文是贝克的意思,从上图我们可以看出,命令解释器shell就像一个贝壳一样包住了系统核心。
 
3.那么究竟什么是shell呢?
我认为有3个特色:1>.能实现某种特定的功能;
2>.拥有执行权限的程序文件;
3>.遵循语法格式,功能(变量函数数组流程控制),系统命令等。
 
4.其实shell程序很类似DOS系统下的批处理程序(扩展名*.bat).
下面是在windows下利用批处理程序bat开发的备份网站及数据库数据的脚步:

 
再让我们看看一个简单的清楚系统日志的shell脚步吧:

补充:清空日志的三种方法:

在运维的角度来讲,出了问题出了看系统日志,还要利用dmesg这个命令哟(一般系统无缘无故down宕机了,可以通过这个命令来看有系统在启动过程中有哪些错误信息,具体的可以man dmesg)
 
5.让我们看看shell在运维工作中的应用吧~很多服务启动脚本,备份工具都是用Shell写的哟:

三.脚本语言的种类以及介绍
1.php语言
它是网页程序,也是脚本语言,更专注于web页面的开发,例如:dedecms,discuz。
也可以处理系统日志,配置文件等。
2.perl语言
perl脚本语言,比shell强大的多,2010年前很火,语法灵活,复杂,实现方法很多,不易读,团队协作困难。
3.Python语言
近几年很火的语言,可以做脚本开发,也可以实现web开发,中等以上的公司都要求会python,
4.shell语言
最容易上手的脚本,shell的优势在于处理操作系统底层的业务,因为有大量的系统命令为它做支撑,2000多个命令都是shell编程的有力支撑,特别是grep,awk,sed等。例如:一件软件安装,优化,监控报警脚本,常规的业务应用,shell开发更简单快速。以下是解释器支持的shell类型。

四.常用操作系统的默认Shell
linux是Bourne Again shell(bash)
Solaris和FreeBSD缺省的是Bourne shell(sh)
AIX下是Korn Shell(ksh)
HP-UX缺省的是POSIX shell(sh)
Centos linux系统默认的shell是bash
注意:编写脚本的时候我们通常会在第一行指定当前脚本所用的解释权,我们写脚本的时候一般都是调用bash,所以第一行我们要写上这么一行:"#!/bin/bash",要注意的是这可不是注释行哟~而是告诉内核我们用的是哪种解释器,下面的所有行,如果在出现类似的内核都会认为是注释行。
补充:
相应语言的开头标识内容
1.#!/bin/bash
2.#!/bin/sh
3.#!/usr/bin/awk
4.#!/bin/sed
5.#!/usr/bin/tcl
6.#!/usr/bin/expect
7.#!/usr/bin/perl
8.#!/usr/bin/env python
五.bash漏洞修复方式
1.背景
网络安全专家警告称,开源软件Linux中一个频繁使用的片段“Bash”,发现存在安全漏洞,其对计算机用户造成的威胁可能要超过2014年4月爆出的“心脏出血”(Heartbleed)漏洞[
2.漏洞原理
ash是用于控制Linux计算机命令提示符的软件。网络安全专家表示,黑客可以利用Bash中的一个安全漏洞,对目标计算机系统进行完全控制。
网络安全公司Trail of Bits的首席执行官丹·吉多(Dan Guido)指出:“与Heartbleed”相比,后者只允许黑客窥探计算机,但不会让黑客获得计算机的控制权。”他说:“利用Bash漏洞的方法也简单得多,你可以直接剪切和粘贴一行软件代码,就能取得很好的效果。”
吉多还表示,他正考虑将自己公司非必要的服务器断网,以保护他们不会受到Bash漏洞的攻击,直到他能够修补这一漏洞为止。
网络安全公司Rapid7的工程经理托德·比尔兹利(Tod Beardsley)则警告称,Bash漏洞的严重程度被评为10级,意味着它具有最大的影响力,而其利用的难度被评为“低”级,意味着黑客比较容易地利用其发动网络攻击。
比尔兹利称:“利用这个漏洞,攻击者可能会接管计算机的整个操作系统,得以访问机密信息,并对系统进行更改等等。任何人的计算机系统,如果使用了Bash软件,都需要立即打上补丁。”
3.修复方式
A - centos系统
yum clean all
yum makecache
yum -y update bash
如果是centos系统只要运行上面简单的脚本就可以。
B - Ubuntu系统
apt-get update
apt-get -y install --only-upgrade bash
C - debian系统
如果是7.5 64位 && 32位环境运行
apt-get update
apt-get -y install --only-upgrade bash
六."source"和"."还有"sh"调用脚本的却别
1."source"和"."的功能是一样的,可以调用脚本,并将脚本里的函数也传递到当前的脚本或者解释器中,但是"sh"后面跟脚本名称,则不会将该脚本的函数传递进来;
2."sh"实际上是执行一个脚本,最后执行完毕会将内存释放掉,不会保存变量。而"."和"source"则不会,这就是为什么在/etc/init.d/这个目录下有很多的脚本都会用"."去调用脚本。
七.shell脚本开发基本规范
1.开头执行脚本解释器
#!/bin/bash或者#!/bin/sh
2.开头加版权等信息
#Date
#Author
#Mail
#Function
#Version
提示:可配置vim编辑文件时自动加上以上信息,方法是修改~/.vimrc配置文件
3.脚本中尽量不要用中文注释
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰
4.脚本以.sh为扩展名
例如:whoami.sh
5.代码书写优秀习惯
1>.成对内容的一次写出来,防止漏洞。
例如:{},[],'',``,"".
2>.[]中括号两端都要有空格,书写时即可流出空格[ ],然后退格书写内容。
3流程控制语句一次书写完,在添加内容。
例如:if语句格式一次完成:
if 条件内容
then
内容
fi
for循环格式一次完成:
for
do
内容
done
提示:while和until,case等语句也是一样。
八.shell变量概念以及变量类型说明
1.什么是变量
简单的说,变量就是用一个固定的字符串(也可能是字符数字等的组合),替代更多更复杂的内容,这个内容里可能还会包含变量的路径,字符串等其他的内容。使用变量最大的好处就是方便,当然,除了方便以外,很多时候在编程中使用变量也是必须的,否则就发无法完成开发工作。
2.变量类型
变量类型可以分为两类:环境变量(全局变量)和局部变量。
1>.环境变量也可以称全局变量,可以在创建他们的shell及其派生出来的任意子进程shell中使用。
2>.局部变量只能在创建他们的shell函数或脚本中使用,还有一些变量是用户创建的,其他的则是专用shell变量。
3.环境变量
环境变量用于定义Shell的运行环境,保证shell命令的正确执行,shell通过环境变量来确定登陆用户名,命令路径,终端类型,登陆目录等,所有的环境变量都是系统全局变量,可用于所有子进程中,这包括编辑器,shell脚本和各类应用。
环境变量可以在命令行中设置,但用户退出时这些变量值也会丢失,因此最好在用户家目录下的.bash_profile文件中或全局配置/etc/bashrc,/etc/profile文件或者/etc/profile.d/中定义。将环境变量放入profile文件中,每次用户登陆时这些变量值都会被初始化。
传统上,所有的环境变量均为大写。环境变量应用于用户进程前,必须用export命令导出。
环境变量可用在创建他们的shell和从该shell派生的任意子shell或进程中。他们通常被称为全局变量以区分局部变量。通常,环境变量应该大写,环境变量是已经用export内置命令导出的变量。
有一些环境变量,比如:HOME,PATH,SHELL,UID,USER等,在用户登陆之前就已经被/bin/login程序设置好了。通常环境变量定义并保存在家目录下的.bash_profile文件中,具体的环境变量可以在Shell解释器中输入env来查看
以下是设置环境变量的三种方法
1>.export 变量名=value

2>.变量名称=value;export 变量名

3>.declare -x 变量名=value

注意:以上定义命令都是在命令行下生效,想要永久定义一个变量可以写道配置文件中去,这样重启系统这些定义变量仍然还是存在的。可以写到”.bash_profile“或者”/etc/profile“才好使哟~
 
九.显示与取消shell环境变量
1.显示环境变量有2种方法
echo:

printf:

注意。printf这个函数实际上更复杂,但是相对功能上要比echo也强大的多,不过我们一般常用的还是echo这个命令来显示~
2.取消变量很简单,用unset就好使了

看,变量为空了,这都是unset干的好使!!!
 
十.局部变量
本地变了在用户当前的shell生存期的脚本中使用。例如,本地变量yinzhengjie取值为25,这个值就只在用户当前shell生存期种有意义。如果在shell中启动另一个进程或退出,本地变量yizhengjie值将无效。
shell中定义一个变量的要求:一般是字母,数字,下划线组成。字母开头。
 
 
 
 
 

shell介绍的更多相关文章

  1. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  2. MongoDB shell 介绍

    MongoDB shell 介绍 MongoDB自带javascript shell, 可在shell中使用命令行与MongoDB实列交互.shell可以执行管理操作,检查运行实列等等操作. 一:如何 ...

  3. Spring Shell介绍

    最近开发中在下遇到了spring-shell开发工具的项目,现在整理了相关文章,以供大家学习 本博客相关的文章均是在Spring Shell 1.2.0的基础上建立   Spring Shell介绍 ...

  4. 8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 

    8.1 shell介绍 8.2 命令历史 8.3 命令补全和别名 8.4 通配符 8.5 输入输出重定向 什么是shell? shell是一个命令解释器,提供用户和及其之间的交互 致辞特定语法,比如逻 ...

  5. shell介绍、命令历史、命令补全和别名、通配符、输入输出重定向

    第5周第5次课(4月20日) 课程内容: 8.1 shell介绍8.2 命令历史8.3 命令补全和别名8.4 通配符8.5 输入输出重定向 8.1 shell介绍 使用yum+管道方式查看zsh和ks ...

  6. Linux centos7 shell 介绍、 命令历史、命令补全和别名、通配符、输入输出重定向

    一.shell介绍 shell脚本是日常Linux系统管理工作中必不可少的,不会shell,就不是一个合格管理员. shell是系统跟计算机硬件交互使用的中间介质,一个系统工具.实际上在shell和计 ...

  7. Hadoop Shell 介绍

    以 hadoop 2.7.3 为例 bin 目录下是最基础的集群管理脚本, 用户可通过该脚本完成各种功能, 如 HDFS 管理, MapReduce 作业管理等. 作为入门, 先介绍bin 目录下的 ...

  8. Linux基础之bash shell介绍及基本特性

    今天继续讲Linux基础知识,内容是关于bash shell的.分享以下bash shell的相关知识,例如基本特性等.  1.8)bash shell的介绍 1.8.1)什么是bash shell ...

  9. linux shell介绍

    Shell定义 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行. 实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内 ...

随机推荐

  1. 【转】mysql数据库中实现内连接、左连接、右连接

    [转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MyS ...

  2. Linq编程101例

    原文地址:101 LINQ Samples in C# Part1 - Restriction Operators Part2 - Projection Operators Part3 - Parti ...

  3. C#错误异常列表

    Exception: 所有异常对象的基类. SystemException:运行时产生的所有错误的基类. IndexOutOfRangeException:当一个数组的下标超出范围时运行时引发. Nu ...

  4. 30.SSH配置文件模板.md

    [toc] 1.struts2 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  5. html5 input属性

    今天才接确html5 +css3 实在是太赞了.  下面我就来介绍一下今天我用到的 input 属性. html5 代码如下: <input type="text" plac ...

  6. Thinkphp 文本编辑器

    文本编辑器:可以从网上下载---ueditor文件夹里面包含php和utf8-php两个文件夹 平时使用时主要用到获取内容和写入内容两个按钮 获取内容: <!DOCTYPE html PUBLI ...

  7. JQuery学习笔记【CSS选择符】--02

    Jquery的程序入口: <html> <head> <title></title> <script type="text/javasc ...

  8. ZOJ1074 (最大和子矩阵 DP)

    F - 最大子矩阵和 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u   Descri ...

  9. JQ——选择器

    选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $( ...

  10. Scut:Redis 资源管理器

    核心文件是:RedisConnectionPool.cs 对象池类的通用泛型封装:ObjectPoolWithExpire<T> 1. 主要变量 private static ICache ...