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. HighCharts常用设置(摘抄笔录)

  2. 地址栏访问Action,后来方法执行两次

    SSH框架,在地址栏输入URL访问Action,后台访问会访问两次.很奇怪. 经排查,最终问题在于方法名称写错了.将getOpinionByPN()修改成queryOpinionByPN(),没有问题 ...

  3. ​ScrollView、ListView嵌套

    1.手动设置ListView高度 经过测试发现,在xml中直接指定ListView的高度,是可以解决这个问题的,但是ListView中的数据是可变的,实际高度还需要实际测量.于是手动代码设置ListV ...

  4. 【转】JAVA的StringBuffer类

    [转]JAVA的StringBuffer类    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...

  5. C# Double类型 不四舍五入

    测试中发现Double类型需要#0.00 小数点精度为后2位,并且多余部分不需要四舍五入,直接截断 用字符串处理也可以,但是比较麻烦 这里给出一种思路: double a = 9999.999; a ...

  6. 【原】AVAudio录制,播放 (解决真机播放音量太小)

    原文链接:http://www.cnblogs.com/A--G/p/4624526.html 最近学习AVFoundation里的audio操作,最基本的录制和播放,参考了一个Code4pp的 一个 ...

  7. Mysql 数据类型使用说明

    FLOAT 和DOUBLE 类型支持使用标准的浮点运算进行近似计算. DECIMAL类型用于存储精确的小数. 因为cpu不支持对DECIMAL的直接计算,所以在Mysql5.0及更高的版本中,MYSQ ...

  8. 用webclient.DownloadFile下载exe文件时大小为0

    用自己写的下载软件从服务器端下载文件,别的文件能下,但exe文件显示下载文件大小为0,连接超时,原因是服务上发布的下载文件夹的虚拟目录的属性有问题, 包含.exe 文件的虚拟目录已启用执行应用程序权限 ...

  9. websphere节点、单元、服务之间的关系

    单元(cell).节点(node).概要文件(profile).服务(server) 在websphere集群(ND版本)模式下: 一个cell单元可以包含多个node节点,node=profile, ...

  10. System.InvalidOperationException: 无法加载协定为“ServiceReference1.XXXXXXXXXXXXXXXX”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。

    <system.serviceModel> <bindings> <basicHttpBinding> <binding name="testWeb ...