Shell - Linux- bashshell (一)入门

什么是Shell?

举个例子来说:当你要计算机传输出来“音乐”的时候,你的计算机需要什么东西呢?


1.  硬件:当然就是需要你的硬件有“声卡芯片”这个配备,否则怎么会有声音;

2.    核心管理:操作系统的核心可以支持这个芯片组,当然还需要提供芯片的驱动程序啰;

3.    应用程序:需要使用者    (就是你)    输入发生声音的指令啰!


这就是基本的一个输出声音所需要的步骤!也就是说,你必须要“输入”一个指令之后,    “硬件”才会通过你下达的指令来工作

那么硬件如何知道你下达的指令呢?

那就是    kernel (核 心) 的控制工作了!

也就是说,我们必须要通过 “ Shell ”将我们输入的指令与    Kernel    沟通, 好让    Kernel    可以控制硬件来正确无误的工作

注:最外层的是shell,即壳程序

其实壳程序的功能只是提供使用者操作系统的一个接口,因此这个壳程序需要可以调用其他 软件才好。 很多指令,包括    man,    chmod,    chown,    vi,    fdisk, mkfs    等等指令,这些指令都是独立的应用程序,    但是可以通过壳程序    (就是命令行界面)    来操作这些应用程序,让这些应用程序调用核心来运行所需的工作。    

也就是说,只要能够操作应用程序的接口都能够称为壳程序。

狭义的壳程序指的是命令 行方面的软件,包括本章要介绍的  bash  等。 

  广义的壳程序则包括图形接口的软件!因为图 形接口其实也能够操作各种应用程序来调用核心工作啊!

 

shell对于管理主机是必不可少的。
 

1.5不同版本的Shell

 Linux   (以   CentOS   7.x    为例)   有多少我们可以使用的   shells    呢?  

 你可以检 查一下    /etc/shells    这个文件,至少就有下面这几个可以用的    shells    

 /bin/sh    (已经被    /bin/bash    所取代)

/bin/bash    (就是    Linux    默认的    shell)

/bin/tcsh    (整合    C    Shell    ,提供更多的功能)

/bin/csh    (已经被    /bin/tcsh    所取代)


注:由于早年的   Unix   年代,发展者众, 所以由于    shell    依据发展者的不同就有许多的版本,例如常听到的    Bourne    SHell    (sh)    、在 Sun    里头默认的    C    SHell、    商业上常用的    K    SHell、,    还有    TCSH    等等,每一种    Shell    都各有 其特点。至于    Linux    使用的这一种版本就称为“    Bourne    Again    SHell    (简称    bash)    ”,这个 Shell    是    Bourne    Shell    的增强版本,也是基准于    GNU    的架构下发展出来的呦!

扫描二维码关注公众号,回复: 4951987 查看本文章

虽然各家   shell   的功能都差不多,但是在某些语法的下达方面则有所不同,因此建议你还是得 要选择某一种    shell    来熟悉一下较佳。

    Linux    默认就是使用    bash    ,所以最初你只要学会  bash 就很不错了!

二      Bash   shell    的功能

    /bin/bash  是  Linux    默认的    shell ,bash    是    GNU    计 划中重要的工具软件之一,目前也是  Linux    distributions 的标准    shell    。

1命令编修能力(history):

“  “他能记忆使用过的指令!”  这功能真的相 当的棒!

因为我只要在命令行按“上下键”就可以找到前/后一个输入的指令!而在很多 distribution    里头,默认的指令记忆功能可以到达    1000    个!也就是说,你曾经下达过的指令几 乎都被记录下来了。


这么多的指令记录在哪里呢?在你的主文件夹内的    .bash_history    啦!  

 不过,需要留意的是, ~/.bash_history    记录的是前一次登陆以前所执行过的指令,    而至于这一次登陆所执行的指令 都被暂存在内存中,当你成功的登出系统后,该指令记忆才会记录到    .bash_history    当中! ”

这有什么优点呢?最大的好处就是可以“查询曾经做过的举动!”    如此可以知道你的执行步 骤,那么就可以追踪你曾下达过的指令,以作为除错的重要流程!

 

 

2  命令与文件补全功能: ([tab]    按键的好处)


  [tab]    按键吗,这个按键的功能 就是在   bash    里头才有的啦!

常常在    bash    环境中使用    [tab]    是个很棒的习惯喔!因为至少可 以让你    

1)少打很多字;

 2)确定输入的数据是正确的!    使用    [tab]    按键的时机依据    [tab]    接 在指令后或参数后而有所不同。我们再复习一次:


[Tab]    接在一串指令的第一个字的后面,则为命令补全; [Tab]    接在一串指令的第二个字以后时,则为“文件补齐”! 若安装    bash-completion    软件,则在某些指令后面使用    [tab]    按键时,可以进行“选项/参 数的补齐”功能!

"所以说,如果我想要知道我的环境当中所有以 c 为开头的指令呢?

就按下“  c[tab][tab]  ”就好 啦!  ,在    bash    shell    下面,多按几次 [tab]    是一个不错的习惯啦!"

3命令别名设置功能:    

(alias)
alias  lm='ls -al' 

也就是说,  lm   会等于 ls    -al    这样的一个功能

4     工作控制、前景背景控制:    (job    control,    foreground,    background)

5     程序化脚本: (shell  scripts)
在  DOS   年代还记得将一堆指令写在一起的所谓的“批处理文件”吧?

在  Linux 下面的    shell scripts 则发挥更为强大的功能,可以将你平时管理系统常需要下达的连续指令写成一个文 件, 该文件并且可以通过对谈互动式的方式来进行主机的侦测工作!也可以借由   shell  提供的 环境变量及相关指令来进行设计,哇!整个设计下来几乎就是一个小型的程序语言了!

6 万用字符:    (Wildcard)

    2.0   查询指令是否为    Bash    shell   的内置命令:  type

通过   type 这个指令我们可以知道每个指令是否为    bash    的内置指令。  

 此外,由于利用  type 搜 寻后面的名称时,如果后面接的名称并不能以可执行文件的状态被找到,    那么该名称是不会 被显示出来的。也就是说,  type  主要在找出“可执行文件”而不是一般文件文件名喔!

      type    也可以用来作为类似    which    指令的用途啦!找指令用的!
 

3.0      Shell 的变量与其他功能

举例来说,我们每个帐号的邮件信箱默认是以  MAIL  这个变量来进行存取的, 当    dmtsai    这个 使用者登陆时,他便会取得    MAIL    这个变量,而这个变量的内容其实就是 /var/spool/mail/dmtsai, 

那如果    vbird    登陆呢?

他取得的    MAIL    这个变量的内容其实就是 /var/spool/mail/vbird    。    

而我们使用信件读取指令    mail    来读取自己的邮件信箱时,嘿嘿,这支 程序可以直接读取    MAIL  这个变量的内容, 就能够自动的分辨出属于自己的信箱信件啰!

3.2  关于环境变量

影响  bash 环境操作的变量
某些特定变量会影响到  bash  的环境喔!

举例来说,我们前面已经提到过很多次的那个   PATH 变量! 你能不能在任何目录下执行某个指令,与  PATH 这个变量有很大的关系。例如你下达 ls  这个指令时,系统就是通过  PATH 这个变量里面的内容所记录的路径顺序来搜寻指令的 呢!如果在搜寻完  PATH  变量内的路径还找不到  ls 这个指令时,  就会在屏幕上显示“ command  not  found  ”的错误讯息了。 

变量的取用与设置:echo,    变量设置规则,    unset

利用  echo  就能够读出,只是需要在变量名称前面加上   $ , 或者是以    ${变量}    的方式来取用都可以!

当然啦,那个 echo 的功能可是很多的,我们这里单 纯是拿  echo  来读出变量的内容而已,更多的 echo 使用,请自行给他  man  echo 吧

例题:请在屏幕上面显示出您的环境变量  HOME  与  MAIL:

答:    echo    $HOME  或者是    echo  ${HOME}    ,  echo    $MAIL  或者是        echo    ${MAIL}  

大概是这样子的。

那么我要如何“设置”或者是“修改”    某 个变量的内容啊?很简单啦!用“等号(=)”连接变量与他的内容就好啦!举例来说:    我要将 myname    这个变量名称的内容设置为  VBird    ,那么:  

 $myname=VBird

$ echo${myname}

VBird   <==出现了!因为这个变量已经被设置了!
 

注:在 bash  中,当一个变量名称尚未被设置时,默认的内容是“空”的。 另外,变量在设置时,还是需要符合某些规定的,否则会设置失败喔!

(具体规则省略)

什么是“子程序”呢?就是说,在我目前这个 shell  的情况下,去启用另一个新的 shell ,新的那 个 shell    就是子程序啦在一般的状态下,父程序的自订变量是无法在子程序内使用的。但是 通过 export  将变量变成环境变量后,就能够在子程序下面应用了!很不赖吧!至于程序的相关概念,我们会在第十六章程序管理当中提到的.

猜你喜欢

转载自blog.csdn.net/Kurapika47/article/details/83500798