zoukankan      html  css  js  c++  java
  • 第十二章 学习 shell脚本之前的基础知识

    http://www.92csz.com/study/linux/12.htm

    什么是shell】

    简单点理解,就是系统跟计算机硬件交互时使用的中间介质,它只是系统的一个工具实际上,在shell和计算机硬件之间还有一层东西那就是系统内核了用户直接面对的不是计算机硬件而是shell,用户把指令告诉shell,然后shell再传输给系统内核,接着内核再去支配计算机硬件去执行各种操作linux发布版本(Redhat/CentOS)系统默认安装的shell叫做bash那么这个bash有什么特点呢?

    1)记录命令历史

    我们敲过的命令,linux是会有记录的,预设可以记录1000条历史命令这些命令保存在用户的家目录中的.bash_history文件中有一点需要你知道的是,只有当用户正常退出当前shell时,在当前shell中运行的命令才会保存至.bash_history文件中

    与命令历史有关的有一个有意思的字符那就是”!”常用的有这么几个应用:(1!! (连续两个”!”),表示执行上一条指令;(2!n(这里的n是数字),表示执行命令历史中第n条指令,例如”!100”表示执行命令历史中第100个命令;(3!字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令

    2)指令和文件名补全

    在本教程最开始笔者就介绍过这个功能了,记得吗?对了就是按tab键,它可以帮你补全一个指令,也可以帮你补全一个路径或者一个文件名连续按两次tab键,系统则会把所有的指令或者文件名都列出来

    3)别名

    前面也出现过alias的介绍,这个就是bash所特有的功能之一了我们可以通过alias把一个常用的并且很长的指令别名一个简洁易记的指令如果不想用了,还可以用unalias解除别名功能直接敲alias会看到目前系统预设的alias。你也可以自定义你想要的指令别名。alias语法很简单,alias [命令别名]=[’具体的命令’]。

    4)通配符

    bash下,可以使用*来匹配零个或多个字符,而用?匹配一个字符

    5)输入输出从定向

    输入重定向用于改变命令的输入,输出重定向用于改变命令的输出输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2>,以及追加重定向>>,稍后会详细介绍

    6)管道符

    前面已经提过过管道符”|”,就是把前面的命令运行的结果丢给后面的命令

    7)作业控制

    当运行一个进程时,你可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使他到后台运行,你也可以使它终止(按Ctrl+c

    变量

    使用echo命令显示变量的值。

    下面笔者简单介绍一下常见的环境变量:

    PATH 决定了shell将到哪些目录中寻找命令或程序

    HOME 当前用户主目录

    HISTSIZE 历史记录数

    LOGNAME 当前用户的登录名

    HOSTNAME 指主机的名称

    SHELL 前用户Shell类型

    LANG 语言相关的环境变量,多语言可以修改此环境变量

    MAIL 当前用户的邮件存放目录

    PWD 当前目录

    env命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用set命令把系统预设的全部变量都显示出来set不仅可以显示系统预设的变量,也可以连同用户自定义的变量显示出来

    虽然你可以自定义变量,但是该变量只能在当前shell中生效,那要想设置的变量一直生效怎么办?有两种情况:

    如果想取消某个变量怎么办?只要输入”unset 变量名即可

    linux shell中的特殊符号

    1. * :代表零个或多个字符或数字

    2. ? :只代表一个任意的字符

    3. # :这个符号在linux中表示注释说明的意思,即”#”后面的内容linux忽略掉

    4.  :脱意字符,将后面的特殊符号(例如”*” )还原为普通字符

    5. | :管道符,前面多次说过,它的作用在于将符号前面命令的结果丢给符号后面的命令这里提到的后面的命令,并不是所有的命令都可以的,一般针对文档操作的命令比较常用,例如cat, less, head, tail, grep, cut, sort, wc, uniq, tee, tr, split, sed, awk等等,其中grep, sed, awk为正则表达式必须掌握的工具,在后续内容中详细介绍

    1grep :过滤一个或多个字符,将会在后续内容中详细介绍其用法

    2) cut :截取某一个字段

    语法:cut -d “分隔字符” [-cf] n 这里的n是数字

    -d :后面跟分隔字符,分隔字符要用双引号括起来

    -c :后面接的是第几个字符

    -f :后面接的是第几个区块

    3) sort :用做排序

    语法:sort [-t 分隔符] [-kn1,n2] [-nru] 这里的n1 < n2

    -t 分隔符 :作用跟cut-d一个意思

    -n :使用纯数字排序

    -r :反向排序

    -u :去重复

    -kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序

    4) wc :统计文档的行数字符数词数,常用的选项为:

    -l :统计行数

    -m :统计字符数

    -w :统计词数

    5 uniq :去重复的行,笔者常用的选项只有一个:

    -c :统计重复的行数,并把行数写在前面

    有一点需要注意,在进行uniq之前,需要先用sort排序然后才能uniq,否则你将得不到你想要的。

    6tee :后跟文件名,类似与重定向”>”,但是比重定向多了一个功能,在把文件写入后面所跟的文件中的同时,还显示在屏幕上

    7tr :替换字符,常用来处理文档中出现的特殊符号,如DOS文档中出现的^M符号常用的选项有两个:

    -d :删除某个字符,-d 后面跟要删除的字符

    -s :把重复的字符去掉

    最常用的就是把小写变大写: tr ‘[a-z]’ ‘[A-Z]’

    当然替换一个字符也是完全可以的

    不过替换删除以及去重复都是针对一个字符来讲的,有一定局限性如果是针对一个字符串就不再管用了,所以笔者建议只是简单了解这个tr即可,以后你还会学到更多可以实现针对字符串操作的工具

    8split :切割文档,常用选项:

    -b :依据大小来分割文档,单位为byte

    -l :依据行数来分割文档

    6. $ :除了用于变量前面的标识符外,还有一个妙用,就是和’!’结合起来使用。‘!$’表示上条命中中最后一个变量(也许称为变量不合适,总之就是上条命令中最后出现的那个东西)例如上边命令最后是test.txt那么在当前命令下输入!$则代表test.txt。

    6.  :分号平时我们都是在一行中敲一个命令,然后回车就运行了,那么想在一行中运行两个或两个以上的命令如何呢?则需要在命令之间加一个”;”

    7. ~ :用户的家目录,如果是root则是 /root ,普通用户则是 /home/username

    8. & :如果想把一条命令放到后台执行的话,则需要加上这个符号通常用于命令运行时间非常长的情况

    使用jobs可以查看当前shell中后台执行的任务fg可以调到前台执行这里的sleep命令就是休眠的意思,后面跟数字,单位为秒,常用语循环的shell脚本中

    此时你按一下CTRL +z 使之暂停,然后再输入bg可以再次进入后台执行

    如果是多任务情况下,想要把任务调到前台执行的话,fg后面跟任务号,任务号可以使用jobs命令得到

    9. >, >>, 2>, 2>> :前面讲过重定向符号以及>> 分别表示取代和追加的意思,然后还有两个符号就是这里的2>  2>> 分别表示错误重定向和错误追加重定向,当我们运行一个命令报错时,报错信息会输出到当前的屏幕,如果想重定向到一个文本里,则要用2>或者2>>。

    10. [ ] :中括号,中间为字符组合,代表中间字符中的任意一个

    11. &&  ||

    在上面刚刚提到了分号,用于多条命令间的分隔符另外还有两个可以用于多条命令中间的特殊符号,那就是 “&&””||”。下面笔者把这几种情况全列出:

    1) command1 ; command2

    2) command1 && command2

    3) command1 || command2

    使用”;”时,不管command1是否执行成功都会执行command2 使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2不执行,否则去执行command2,总之command1command2总有一条命令会执行

  • 相关阅读:
    Silverlight 4中把DataGrid数据导出Excel
    C#正则的委托和lambda表达式用法
    C#简单的写日志方法
    GAE上传失败
    asp.net后台进程做定时任务
    ASP.NET页面生命周期描述
    巴士电台新版发布
    jQuery 1.51.7一些值得注意的更新
    wxPython应用心得
    Ajax保留浏览器历史的两种解决方案(Hash&Pjax)[转]
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3726487.html
Copyright © 2011-2022 走看看