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. 对require.js 的使用进行总结

    一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...

  2. 高健壮性css---Float详细

    (一)关于float 首先我们了解到,CSS网页布局的原理,就是按照HTML代码中对象声明的顺序,以流布局的方式来显示它,而流布局就不得不说到float浮动技术..在HTML中的所有对象,默认分为两种 ...

  3. 下拉框上移、下移、添加、移除demo

    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <sc ...

  4. H5与Activity之间的通信(调用)

    1.通过H5页面的超链接尾部信息不同进行跳转(类似于URL拦截器) 例如:控件x的href="http://www.example.com/?menu_id=1", 在代码中添加w ...

  5. java中的数据库事务处理

    /*java使用事务处理,首先要求数据库支持事务,如使用MYSQL的事务功能,就要求mysql的表类型为Innodb,*/ /*InnoDB,是MySQL的数据库引擎之一 与传统的ISAM与MyISA ...

  6. C# Wpf双向绑定实例

    Wpf中双向绑定处理需要两处 实例1: 1.前台Xaml中属性Binding 时Model指定 TwoWay <Grid> <Ellipse x:Name="ellipse ...

  7. c-连接两个链表

    概述 还是相对简单,不过要记得释放不用的头结点即可. 代码为: //将lList2头结点连接在lList1尾结点的后面. void combine(linklist lList1, linklist ...

  8. 【转】 UITableView 的indexPath

    原文:http://blog.csdn.net/mengtnt/article/details/6733691 前面说过了viewController的一些基本注意事项.这里针对不同的viewCont ...

  9. UITouch触摸事件

    UITouch触摸事件 主要为三个方法 1.-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{2.3. UITouch * ...

  10. 【USACO 1.4.4】母亲的牛奶

    [题目描述]  农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原 ...