一块儿学Shell之(一)背景知识

#--------------------------------------------------------------#shell

# ====> 红色字体 -特指煮酒我的所见。加粗则为须要重点注意     #安全

# ====> 蓝色加粗 -特指与本文相关人员,包括参与修正的朋友。 #bash

# ====> 煮酒品茶 -Http://cwtea.blog.51cto.com              #
 
#--------------------------------------------------------------#
 

 
开篇序:
煮酒品茶:首先须要申明的,首先本人并非一时心血来潮而写此“专题”,而是实时的记录学习Shell的一个过程,采自书《Shell脚本学习指南》,很是感谢原书做者能写出看法。并针对书上的文章进行一些我的的理解和见解,看客权当此是一本书的笔记便可,适才我也是如是想的。需注明的是本人也是边看边记笔记, 这当中会夹杂我的的一些灵感和一个错误的观点,但愿不要误导读者,固然也但愿读者在查阅的时候最好连原著一块儿看。多加强本身的灵动性与感知性。文章有错误或者您有更好的建议,请留下留言,笔者会认真去接受建议以及对文章错误信息进行更新。
煮酒品茶:首先对笔记是以下规划的。记录必需要记录的概念,以及对脚本核心思想的理解。以及对文中概念的一些扩展甚至是设想。每篇文章都会写下总结,来权衡文章的质量以及增长笔者的水平。可能的话会在每篇笔记后找相关脚原本学习脚本编写者的思路以及过程。也但愿在这个过程当中能获得高手们的指点,不出意外一共会有笔记15-20篇根据书本的进程设定。
煮酒品茶:文章会不按期的进行更改以及优化更新。多关注文章变更便可。文章更新变更会以标题为【第几回编辑】为基准。
 
基本信息
书名: 《Shell脚本学习指南》
原书名: Classic Shell Scripting
原出版社: O'Reilly Media, Inc.
做者: Arnold Robbins    Nelson H.F.Beebe   
译者: O'Reilly Taiwan公司
 
1、背景知识介绍
 
Shell的工做是:执行命令、Shell支持Postix标准。
 
Shell的格式是:
一、以空格或者Tab键隔开命令行的每一个组成部分。
二、命令名称是命令行的第一个项目,一般后面会跟选项以及参数。
三、选项的开关是破折号(——)或者减号(-),后跟字母,选项是可有可            无的,
四、分号(;)可用来分隔同一行里多余的命令。
注:使用“&”符号则Shell将后台执行前面的命令,意味着shell不用等到命令完成就能够执行下一条命令。
 
煮酒品茶:这个仍是比较好理解的,最开始品茶居然不知道破折号怎么打,这时候同事就派上用场了。破折号通常用于软件安装定义目录居多,也就是外部命令最经常使用的。
 
Shell识别的基本命令:
一、内建命令  - 由Shell自己所执行的命令。如cd、read、test、echo、printf等。
二、Shell函数 - 是功能健全的一系列程序代码,以Shell语言写成,能够像命令同样被引用。如if else 赋值操做同样。
三、外部命令  - 是由Shell的副本执行的命令,模式为父Shell启动子Shell而后由子Shell启动新程序,处理完以后交由父Shell执行。
 
变量:
定义:为某个信息片断所取的名字。
规则:每一个变量只有一个值,变量能够为空(null)值,首字母必须是字母或下划线,内容能够是任意长度。
赋值方式:变量名称=字符(中间不要有空格),若是需赋值的内容中须要带空格那么须要带引号,须要取变量时能够用美刀($)加变量名称来取。 
 
煮酒品茶:我本身记这些定义记得我烦的很啊,可是真正理解后想一想又很是简单。必定须要记住这些规则,记住了你之后要少翻不少资料。讲点好玩的吧。不少的脚本第一行是 #!/bin/bash,知道为何第一行是这个吗?不知道吧,我来告诉你咯,若是没有这一句,当你赋于写运行权限时运行这个程序,程序会先交由内核来处理,而内核知道处理编译程序,但一看你不是编译程序,那么他就认为是个Shell,又丢给了shell来执行。咱们再回头看下#!/bin/bash就很是明了了,又有人问了,在Shell里面#不都是用来注释的吗?对确实,可是在脚本里,第一行是预留的,若是有#!/bin/bash那么他就直接认定你为一个Shell就不交由内核来处理。咱们来构造着玩玩吧。先是#! /bin/bash 加了一个空格,咱们会发现其实没区别,可是从Linux流程上来说他但是有区别的啦,当第一行遇到空格时Shell就中止了检索。这时仍是先交内核而后再还给Shell,因此不能有空格啦。(测试发现#!后面加空格也没事,估计是如今标准升级过了吧。还有就是这一行redhat系列的是最多支持127个字符咯,如今有没有升就不知道了。之后若是搞多了提示出错至少知道这里也会出问题的。)再来构造一个别的可执行cat程序啦,来试试是什么感受?

  
  
           
  
  
  1. [root@localhost test]# ./ts  
  2. #!/bin/cat  
  3. hello 51CTO  
看到没咯?第一行定义他找/bin/cat的麻烦,流程就变成这样了,执行ts,ts找/bin/cat来执行ts这个脚本。
 
  
  
           
  
  
  1. [root@localhost test]# cat ts 
  2. #!/bin/cat 
  3. hello 51CTO 
 
那么这两个显示的就是同样咯。是否是很好玩?再来玩,SH的权限要大于bash喔,哈哈,运行程序直接sh 程序名,bash 程序名也是能够的啦。
 
  
  
           
  
  
  1. [root@localhost test]# ll /bin/sh 
  2. lrwxrwxrwx 1 root root 4 Apr 25 22:42 /bin/sh -> bash 
  3. [root@localhost test]# ll /bin/bash 
  4. -rwxr-xr-x 1 root root 768664 Jul 22  2011 /bin/bash 
玩完了作点正事。介绍两个命令who与cat 其实也就是跟着书上的进程走的。但原书的命令参数好像有问题。不过我有Linux查询宝典啦。
 
who属性:系统相关-系统安全
who语法:who [参数] [记录文件]
  
  
           
  
  
  1. -a : 显示全部信息 
  2. -b : 显示系统最后一次重启的时间 
  3. -d : 显示已失效的保存 
  4. -H : 显示标题栏    
  5. -i : 显示系统闲置时间 
  6. -l : 只显示行数 
  7. -m : 只显示本身登录的相关信息 
  8. -q : 只显示登陆系统的用户名称与总人数 
  9. -r : 显示当前的执行等级 
  10. -t : 显示最后一次修改时钟的时间  
  11. -h : 不要显示标题列 
  12. -u : 显示用户已闲置的时间 
 
  
  
           
  
  
  1. wc做用: 字数计算 
  2. wc语法:wc [选项] [文件] 
  3. -c : 统计字节数。   
  4. -l : 统计行数。   
  5. -w : 统计字数。   
煮酒品茶,who百度无果谷哥无果,本身敲的,累死,至于原做者为何要拿who和wc放一块儿讲,应该是觉着都是w吧,并且wc不能单独使用,因此就组合咯。做用在于啥呢,
 
好比说:咱们要显示当前用户的行数,那么就构造 
#who -a | wc -l  
还有不少,基本上按表就能够一一写出。who这个命令着重于安全一点。而wc则是侧重于查询文件的一点信息。如字节数啊,行数啊,字数啊,等等,如何利用就看你的咯
 
总结:咱们总了,SHell的格式,Shell识别的命令,变量以及变量的规则。还讲了两个命令who与wc,如今回想一下还记得多少?
相关文章
相关标签/搜索