首页 > 系统服务 > 详细

#4 什么是shell与bash的特性

时间:2017-03-21 13:19:38      阅读:239      评论:0      收藏:0      [点我收藏+]

Shell:

  操作接口,为用户提供简单易用的操作界面,

  Bell实验室:bourne shell --> sh

  Bill joy:C shell --> csh --> tcsh

  David korn:korn shell --> ksh

  Gun:bourne again shell --> bash(默认的Linux标准shell)

  Zsh:


默认系统中所支持的shell:

  ~]# cat /etc/shells


bash特性:

  一、命令别名(自定义命令)alias(查看别名命令)

alias命令可以用来定义和显示命令的别名。

但是使用alias命令定义的别名,其生命期仅为当前shell的生命期;


对于每个用户来说,都有一个私有的bash配置文件,用于保存别名:

   ~/.bashrc


注意:

   1.alias命令的效果仅限于当前shell的生命期;

   2.如果修改.bashrc配置文件,其中保存的别名并不会立即生效,只有在重新加载该文件的内容之后,才会生效,且永久生效;

   3.为了能够保证我们设置的别名永久有效,通常两种操作都要做;

 

撤销别名:

unalias:

unalias:name(别名名称)

  二、命令历史:

Bash进程会保存其会话中用户曾经执行过的命令,以方便用户重复执行某个命令;

通过bash提供的历史命令文件来持久保存此前执行过的命令,每个用户都有其自己私有的历史文件;

登录shell的时候,bash会自动读取~/.bash_history文件中所记录的所有命令;


history命令:

    -c:清空历史缓冲区中的历史命令;

    -d offset:删除特定历史命令条目;


重复执行前一个命令的方法:

    1.使用上方向键,回车执行;

    2.Ctrl+p,回车执行;

    3.!-1,回车执行;

    4.!!,回车执行;


重复执行历史缓冲区中的命令:

    !#(数字)重复执行历史命令中编号为“#”的命令

    !string(字符串):从历史缓冲区中查找最近一次执行过的以“String”开头的命令,并执行;

    !?string(字符串):从历史缓冲区中查找最近一次执行过的包含“String”的命令,并执行;

    !-#(数字):重复执行历史缓冲区中倒数第“#”条命令;


Ctrl+r:在历史缓冲区中实施搜索,回车执行即可;

       

重复使用历史命令中的一部分:

        !$:表示最后一次命令中最后一个参数;

        先按ECS,然后按.:表示最后一次命令中最后一个参数;

        Alt+.:表示最后一次命令中最后一个参数;

        !^:表示第一个位置的参数

        !:#(数字):表示最后一次命令中第“#”个位置的参数;

        !#(数字):#(数字):表示在历史缓冲区中第“#”个命令的第“#”个参数

        !string(字符串):^|$|*|#:


与历史相关的bash变量:

        Histsize;

        Histfilesize;

        Histtimeformat;

              Histtimeformat=“%F %T”(显示时间)

        Histcontrol;

             ignoredups:忽略连续且相同的命令的历史缓存;

             ignorespace:忽略以空白字符开头的命令;

             ignoreboth:以上两个功能都启用;

  三、快捷键

     C-->Ctrl

     M-->Alt

     E-->Esc

     del-->backspace


在命令行模式下使用的快捷键:

C-l:clear,清屏;

C-a:将光标跳转至命令行的行首;

C-e:将光标跳转至命令行的行尾;

c-u:删除光标所在位置至行首的命令行信息;

C-k:删除光标所在位置至行尾的命令行信息;

C-c:结束前台进程,取消命令的运行;

  四、命令补全机制:

     两个方面的理解:

        命令本身的字符串的补全

        参数的补全


shell命令的执行过程:

     1.Shell会根据用户键入“enter”来判断用户的输入结束;

     2.shell会将收集的命令信息,根据空白字符来分段(token),第一分段被理解为命令字段;

     3.判断第一字段是内部命令还是外部命令,如果是内部命令,则直接运行,如果是外部命令,通过path变量所指示的路径信息,去查找相关的位置,以确定是否存在同名文件,如果有,就执行;否者就报错;

     4.判断选项是否正确,判断参数是否正确;

使用tab键可以完成命令补全:

如果给出的字符串不能作为唯一的标识,则bash不予补全;再次敲击tab键,bash会给出参考列表;如果参考列表中的内容过多,bash会询问是否显示该列表;

根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找;

五、命令行展开:

     ~:bash会自动将其展开为当前登录用户的家目录;

     ~string(字符串):bash会自动将其张开为以“string”为用户名的家目录;

     ~+:调用shell变量“pwd”的值;

     ~-:调用shell变量“oldpwd”的值;

     {}:在花括号中可以填充一个以“,”分隔的路径列表,bash会将其展开为多个独立的路径

    






六、命令的执行结果:

          任何一个Linux命令都有两种执行结果;

              其一:命令的正常输出结果;

                跟用户需求相关的返回内容;

                ``(英文状态下~键):反向单引号,反引号

                $():标准的命令引用格式

wc:统计一个文件中的行数、字数及字节数;

           -c:只显示字节数;

           -l:只显示行数;

           -w:只显示字数;

 

              其二:命令的执行状态返回值;

                跟命令执行成功与否相关的返回内容;

                保存在bash的一个特殊变量中:$?

                0:命令执行成功

                1,2,127:bash内置状态返回值;

                   1:表示小问题

                   2:表示严重问题

                   127:表示命令本身问问题;

                3-126,128-255:用户自定义状态信息;

七、引用功能:

‘’:强引用

     凡是被单引号引用的内容,bash一律将其视为普通字符,即便其本身有特殊功能和作用也是如此。但单引号本身是个例外。

 “”:弱引用

     被双引号引用的内容中,有些特殊字符仍然会保留其特殊含义,比如说:$、\、”


问题:备份/etc/整个目录的内容到/tmp,要求备份的文件名为etc-系统时间


八、转义功能:

         \:bash中定义的转义字符:只能使其后一个字符失去特殊意义;

九、Globbing(文件名通配,简称为glob):

          元字符(基本字符):

              *:匹配任意长度的任意字符,某些特殊位置的“.”字符不能被匹配;

              ?:匹配任意单个字符,必须且只有一个字符被匹配;

             []: 匹配指定范围内的任意单个字符,必须且只有一个字符被匹配

                     在“[]”中范围的显示的模式:

                      [a-z]:a,A,b,B,c,C...y,Y,z

                      [A-Z]:A,b,B,c,C…y,Y,z,Z

                      字符集:

                        [:lower:]:表示所有小写字字母;

                            [[:lower:]]:通配任意单个小写字母;

                        [:upper:]:表示所有的大写字母;

                            [[:upper:]]:通配任意单个大写字母;

                        [:alpha:]:表示所有字母字符;

                        [:digit:]:表示所有的十进制数字    10

                        [:alnum:]:表示所有的大小写字母以及十进制数字

                        [:space:]:表示空白字符

                        [:punct:]:表示所有的标点符号

                        ^: 取反匹配,[^]表示不要的意思

问题:显示/etc/目录下,以非字母开头,且其后跟了一个字母以其他任意字符的文件名;


回顾:

  快捷键,命令补全,命令引用,引用,命令行展开,转义字符,通配符;

十、输入输出重定向:

          在使用计算机的时候,实现某种功能的主题是:程序

          程序=指令+数据         

          数据:文件,io

         可以用于输入的设备:文件

           键盘文件、文件系统中的常规文件、网卡设备、声卡设备等; 

         可以用于输出的设备:文件

           显示器、文件系统中的常规文件、网卡设备、声卡设备等;


         每一种程序都有三种形式的数据流:

           输入数据流:为程序获取数据的数据流;默认的输入数据流的来源就是键盘;

           输出数据流:将程序所处理的数据结果展示给用户的数据流;默认的输出数据流的终点是显示器;

           错误数据流:将程序无法处理或处理过程中出现问题的结果展示给用户的数据流:默认的错误数据流的终点是显示器;


           从键盘实现的输入数据流称为标准输入;    

           到显示器上的输出数据流称为标准输出;

           到显示器上的错误数据流称为标准错误输出,简称标准错误;

              

           文件描述符:file descriptor,简称:FD

              0:标准输入,stdin

              1:标准输出,stdout

              2:标准错误,stderr


           IO重定向:采用非标准设备文件实现的IO操作;

            

           简单来说:

             不是从键盘设备完成的数据流输入就可以称为输入重定向或重定向输入;

             不是到显示器设备的正确输出数据流就被称为输出重定向或重定向输出;           

             不是到显示器设备的错误输出数据流就被称为错误重定向或重定向错误;




                >:覆盖输出重定向

                ~]# set -C        //开启防误覆盖开关

                  在此开关开启后,可以使用“>”符号继续覆盖重定向

                ~]# set +C        //关闭防误覆盖开关

               >>:追加输出重定向

 

               错误重定向:

                 2>:覆盖错误重定向;

                 2>>: 追加错误重定向;


                合并标准输入和标准输出的重定向:

                 1)&>,&>>   (4.0以上的bash才支持的符号)

                 2)command >|>> path/to/somefile 2>&1

                

                /dev/null:blackhole,bitbucket(位桶 垃圾桶),

                              

                Ls /tmp/a.txt &> /dev/null

                             ||(等号)

                Ls /tmp/a.txt > /dev/null 2>&1

 

                输入重定向:

                    <:

                          

                    <<:here document(此处文档) 

                   <<<:here string(此处字符串)


问题:/etc/passwd      将小写字母换成大写字母     将数字删除



十一、管道

       |:

          Command1 | command2 | command3 | ...

        注意:所有的用于管道连接的命令,都应该是能够有标准输出数据流的命令;


  

                  tee:T


#4 什么是shell与bash的特性

原文:http://12486569.blog.51cto.com/12476569/1908686

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!