zoukankan      html  css  js  c++  java
  • Linux Shell编程之谈谈bash

    Shell是一个命令行工具。Shell(也称为终端或者壳)充当的是人与内核(硬件)之间的翻译官。用户报一些命令“告诉”终端,他就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流的Linux系统默认使用的终端是Bash(Bourne Again SHell)解释器。

    一、bash的优势

    • 通过上下方向键来调取过往执行过得Linux命令
    • 命令或参数仅需要输入前几位就可以用Tab键补全
    • 具有强大的批处理脚本
    • 具有实用的环境变量功能

    二、bash的使用

    如图,bash可以从标准输入或者文件中读取命令。

    1. 标准输入读取命令

    如图bash是可以嵌套的。当我们打一个exit就会退出一个bash。多打一个exit的话便会退出SSH连接。

    2. 从文件中读取命令

    创建sh01.sh文件,输入如下内容:

    我们使用source命令来执行我们的sh文件,source是内部命令,具体含义如下:“在当前shell执行文件中的命令”.什么是当前shell?我们说过bash是可以嵌套的。不同的bash执行相同的命令,可能结果不同(比如 echo $$ 来输出当前进程号),所有当前shell就是指的现在所在层的bash。

    执行结果如下:

    source命令相同 .也表示在当前shell执行文件内的命令:

    3.bash的层级关系

    bash具有层级关系,我们可以通过pstree命令来查看bash的层级关系,示例如下:

    系统进入默认是第一层bash【1235】,当我们再键入一个bash命令就会嵌套一层bash,依次类推,才有了我们进程号为1798、1805的bash。

    思考:既然bash是一个命令,那么我么是否可以bash执行文件内容呢?

    当然可以。但是又会嵌套一层bash,具体如下:

    但是我们执行pstree命令却发现为什么只有最外面一层默认的父bash,而没有执行sh01.sh文件的子bash呢?

    显然这个过程是先开启bash然后执行完毕后再退出bash。

    三、脚本的本质

    我们知道yum工具执行的是python脚本,那我们来看一下我么的yum文件more /usr/bin/yum

    我们发现,yum文件在第一行声明了python脚本,说明要启动一个python的终端。也就是这样一个流程:

    我们当前的bash读取到文件的第一行后启动相应的子终端,然后子终端执行下面的命令。

    同理我们也同样可以声明我们的sh01.sh:

    我们使用当前bash命令执行source或者 . ,执行结果并没有什么改变:

    我们通过chmod +x命令来将其改变为可执行文件来执行:

    我们发现进程号不是1235了,而是1845;并且当前默认bash下层也有了子层级。说明我们的bash确实是读取可执行文件sh01.sh的首行来启动新的bash来执行文件内的命令。

    注意:事实上首行不声明也能执行。因为我们bash执行文件会默认打开一个子bash执行文件内命令。但是如果是python脚本文件的话就必须首行声明,因为启动的是bash来而非python终端来执行python命令是会报错的。

  • 相关阅读:
    XSS漏洞攻击
    String 是值类型还是引用类型
    客户端验证不能代表服务器端验证
    PowerDesigner参照(Reference)笔记
    LazyAllocate(缓分配)与PreAllocate(预分配)
    我在delphi7下调用微软的Web Services的心得.(可以返回数据集)
    C Dungeon Master
    TimeQuest笔记
    XPStyle Button
    对XML文件的CRUD(添加,读取,搜索,修改,删除)的例子
  • 原文地址:https://www.cnblogs.com/nm666/p/10865385.html
Copyright © 2011-2022 走看看