shell基础知识及使用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell基础知识及使用方法相关的知识,希望对你有一定的参考价值。

shell基础知识及使用方法

  SHELL是用户与操作系统之间完成交互式操作的一个接口程序,为用户提供简化了的操作。

   第一代shell在上世纪70年代中于贝尔实验室中诞生,名为bourne shell,简称sh,后期又衍生出多个版本,如csh,ksh等;而Linux系统中默认的shell程序是由GNU发行的bash,它是完全开源的。

  下面就来说说bash的特性:

  

 一:命令的别名--(自定义命令)

              alias:(help alias查询)定义或显示别名

   格式:alias [-p] [名称[=值] ... ]

注意:如果alias命令不带任何选项和参数,则表示显示所有已经定义并生效的别名设置;使用如下:

技术分享

unalias:从别名定义列表中删除每一个“名字“。它的用法和alias差不多。

注意:无论使用alias命令或unalias命令,其功能都会立即生效;此命令的生命期仅为当前shell的生命期;一旦注销登陆,相当于关闭bash,则使用alias命令定义的别名或使用unalias命令删除的别名操作,会立即失效;

对于每个用户来说,都有一个私有的bash的配置文件,在用户家目录中的一个隐藏文件,文件名为“.bashrc”,其主要功能时用来保存命令的别名的定义;


  

二.bash 的快捷键;

c:ctrl键

M:alt键

E:esc键

DEL:backspace键



C-l:清屏,相当于clear命令;

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

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

C-k:删除命令行编辑模式的光标所在位置至行尾的内容;

C-u:删除命令行编辑模式的光标所在位置至行首的内容;

C-c:结束前台进程;

M-:引用上一个命令的最后一个参数;

E:功能同M-;


  

三.命令历史:

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

命令的历史包括两个方面:

   1.用户曾经执行过的命令;

    2.用户曾经执行过的命令的路径;

在bash中有一个内置的变量--PATH,PATH变量的值为当前系统中所有的命令的文件所在的路径的集合;


命令是如何执行的?

bash会将命令行的内容按照空白符进行切片,分析第一个切片的内容;


   1.判断第一个切片的内容是内部命令还是外部命令;

    如果是内部命令,则直接运行;

    如果是外部命令,先找hash表中的路径缓存,如果有,则直接执行,否则通过查找PATH变量中包含的路径中,是否有对应名称的文件;


     使用hash命令查看被记住的命令文件的路径;

    -r:忘记所有记住的位置;

     使用history命令查看被记住的命令的命令行参数;

history-显示或操纵历史列表。

格式:

history: history [-c] [-d 偏移量] [n] 或 history -anrw              [文件名] 或 history -ps 参数 [参数...]技术分享



           常用选项:

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

 -d:删除指定的历史命令条目;

技术分享

技术分享




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

     !NUMBER:重复执行历史缓冲区中编号为“NUMBER”的命令;技术分享

     !STRING:重复执行历史缓冲区中以“STRING”开头的最后一次                  执行过的命令;

     !?STRING:重复执行历史缓冲区中包含了“STRING”的最后一次                   执行过的命令;

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


     使用上下Arrow可以从历史缓冲区调用命令,回车之                  后执行;

     C-r:在历史缓冲区实施搜索,回车之后执行;




     !$:在历史缓冲区中调用最后一个命令的最后一个参数;

     !^:在历史缓冲区中调用最后一个命令的第一个位置的参数;

     !:NUMBER:在历史缓冲区中调用最后一个命令的                     第“NUMBER”个位置的参数;





     在bash中与命令历史相关的内置变量:

HISTSIZE:历史缓冲区中能够保存的命令历史的最大条目数量,默                  认值为1000.

HISTFILESIZE:~/.bash_history文件中能够保存命令历史的最大                  条目数量,默认值为1000;

     HISTIMEFORMAT:在命令历史缓冲区中记录历史命令时,同时记录                  命令的执行的时间的时间戳标记;可以使用date命令                  的format来表示时间的记录格式;默认值为空;

HISTCONTROL:控制命令历史的记录方式:

     ignoredups:连续且相同的命令不会被记录到历史缓冲区;此为                  默认值;

ignorespace:以空白字符开头的命令不会被记录到历史缓冲区;

ignoreboth:上述两种情况都不会被记录到历史缓冲区;


  四.命令补全

1.构成命令字符串的补全;

参考PATH变量中的路径,对命令进行补全;

如果,给出的字符串在PATH变量对应的路径时唯一的,则直接补全命令;

如果,给出的字符串在PATH变量对应的路径时不是唯一的,则bash给出提      示;



2.命令中参数所对应的字符串补全;

根据给出的路径进行补全;

如果,给出的字符串在给出的路径中是唯一的,则直接补全命令;

如果,给出的字符串在给出的路径中不是唯一的,则bash给出提示;



 五.命令行展开

     1.~展开:

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

     ~STRING:bash会将其自动的展开为以“STRING”为用户名的用户的家目      录;

     ~+:调用bash的内置变量的“PWD”的值;

     ~-:调用bash的内置变量的“OLDPWD”的值;



     2.{}展开:

     在{}中,可以填充一个以“,”分割的路径判断列表,bash 会将其展开为      多个独立的路径;

  1.txt{,.bak}==1.txt 1.txt.bak(cp)




 *六.命令的执行结果

在bash中,命令的执行有两种结果:

1.执行命令的输出结果;

根据用户的需求获取到的命令执行的正常输出结果;

命令引用或命令替换;


``(反向单引号)相当于$()

     示例:创建一个文件,文件名为test-系统时间;

~]:#touch test-~date +%F+%H-%M-%S~




2.执行命令的状态返回值;

与此前的一个命令是否成功执行相关的返回内容;

bash使用一个特殊的内置变量来保存其内容:$?

$?实际上保存的是一个数值,保存范围0-255


其中:

0:表示执行成功;

1-255:表示命令执行失败;

1,2,127:bash中内置的命令执行的状态返回值;

1:表示小问题;

2:表示大问题;

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

其余数字(3-126,128-255):用户可以自定义的失败状态返回值;





  七.引用功能;


``:强引用;

凡是被单引号引用的内容,bash在处理时,一律将其视为普通字符,,及      其本身是bash定义的具有特殊功能和作用字符亦是如此,但单引号本身除      外



“”:弱引用;

     被双引号引用的内容中,有些特殊字符仍然胡保留其特殊含义,如$,\,"";




  八.转义功能;

\:bash定义的转义字符;大多数情况下,\只能将其后面的一个字符转义;


\COMMAND取消定义过的,命令别名,而使用命令本身的功能;





  *九.Globbing--文件名通配符,简称glob;

*:匹配任意长度的任意字符或字符串;(某些特殊位置的“.”字符不能      匹配;)

     ?:匹配任意单个字符;(某些特殊位置的“.”字符不能匹配;)

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


     指定范围的方法:

1.枚举法:列出所有有效字符;

2.范围指定

[0-9]:表示所有单个的十进制数字;

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

[A-Z]:A,b,B,c,C........z,Z


3.bash内建字符集;

[:lower:]:所有的小写字母;

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

[:alpha]:所有字母,包括大小写;

[:digit]:所有单个的十进制数字;

[:alnum:]:所有的字母和十进制数字;

[:punct:]:所有的符号;

[:space:]:表示空白字符,包括空格和制表符;


4.反向匹配;

^

示例:#ls a [^[:digit:]]?? 表示文件名的第二个字符不能是十进制数      字;


注意:当括号中有“^”表示字符集反向匹配时,注意"*"的使用;因        为"*"通配范围可能会导致反向匹配失败,此类失败是因为bashd的          globbing是在贪婪模式下匹配的;



  十.管道

  |

管道通常是用来连接多个命令的,将管道符号前面的命令的执行的输出结      果通过管道传递给管道符号后面的命令,让后面的命令将前面的命令的输      出结果当成参数使用;


     wc:

     wc - 输出文件中的行数、单词数、字节数

格式: wc [选项列表]... [文件名列表]...

常用选项:

-c, --bytes, --chars输出字节统计数。

-l, --lines输出换行符统计数;

-m:仅显示文件中有效字符的数量;

-w, --word:输出单词统计数;技术分享


     注意:

1.一般来讲,凡是被管道连接的命令,都应该能够在执行成功之后完成命      令结果的输出;否则管道无意义;

2.管道不是万能的,有些场合无法使用管道;



  十一.输入输出重定向

     在使用计算机的时候,实现某个功能的主体是程序;


     程序=指令+数据(数据至关重要!)


     文件,IO--输入输出


     在Linux系统中,能够完成输入输出功能的实体:文件


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

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


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

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



     在内存中使用文件的方式是定义文件描述符,一个文件描述符对应一个文      件;

      0:表示标准输入,stdin,从键盘实现的输入数据流;

      1:表示标准输出,stdout到显示器的输出数据流;

      2:表示标准错误,stderr到显示器的错误数据流;


 

      输入输出重定向(IO重定向)

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


 输入重定向:

   <


 输出重定向:

   >:覆盖输出重定向;

 ~]# set -C  开启防止意外覆盖源文件开关,可以使用“>|”符号完成        覆盖重定向输出操作,而无需关心是否开启此开关;

   >>:追加输出重定向;


  错误重定向:

   2>:覆盖错误重定向;

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



  合并标准输出和标准错误的重定向;

  1.COMMAND{>|>>}/PATH/TO/SOMEFILE 2>&1

  2.&>,&>>



  特殊的设备文件;

  /dev/null: BlackHole,Bitbucket(位桶);

  /dev/zero:泡泡机,吐零机;



  bash中的其他特殊符号:

  *<<:here document:此处文档,结束标记;

  <<<:here string,此处字符串,结束标记;

上述就是我的收获,但是还有很多没有弄清楚,在后期我会多加练习,再加以修改。







  

本文出自 “计算机基础” 博客,转载请与作者联系!

以上是关于shell基础知识及使用方法的主要内容,如果未能解决你的问题,请参考以下文章

Shell编程——shell的基础知识及常用命令

Shell脚本基础 使用变量 条件测试及选择 列表式循环

shell脚本基础1 概述及变量

Linux学习----基础篇(shell命令及vi使用)

shell编程基础一(多种方法求值1+2+..+100)

shell编程基础一(多种方法求值1+2+..+100)