Linux Shell 学习笔记1:Shell程序的运行及基本介绍

运行Linux的三种方法:
1.使文件具有可执行的权限,直接运行程序。
2.直接调用命令解释程序执行程序。
3.使用source执行程序。

命令行shell执行程序的时候,首先需要判断程序是否具有可执行权限,如果权限不够,则程序会被拒绝执行。

chmod命令可以修改文件的权限。+x参数可以使程序文件具有可执行权限。
(程序文件可以分为二进制的文件(例如/bin下的ls,mkdir等命令文件),或者脚本文件)

命令行shell接收到执行命令后,并且判定用户具有执行权限后,则调用Linux内核命令fork一个进程,在新建的进程中调用我们指定的命令文件。
如果这个命令文件(例如 ls等命令)是编译性(二进制文件),则Linux内核知道如果执行。
如果这个命令文件是一个文本文件的时候,Linux内核则会返回”not executeable file”的错误,则shell收到这个消息时,会识别出命令文件为脚本。shell在判断出这个文件是一个脚本文件时,启动一个新的shell进程来执行这个程序。但是,现在的Linux系统一般拥有好多个shell环境,因此,一般的脚本文件会在第一行通过命令 #!/bin/shell名称(bash, python, php等)来指定脚本的类型。

命令行在执行到第一行的 #!bin/bash时,发现#!时,会读取其后的字符,从而获取解释器的完整路径,如果解释器有参数的话,也一并读取进行处理。

获取完整解释器路径的命令如下:
$> whereis bash
/bin/bash

shell命令的种类
Linux Shell命令可以分为3类:内建命令,shell函数,外部命令
(1)内建命令就是shell程序本身包括的命令。
这些命令集成在shell解释器中,例如,几乎所有的shell解释器都包含cd内建命令来改变工作目录,部分内建命令的存在就是为了改变shell本身的属性设置的,在执行内建命令是,没有进程的创建和消亡;另一部份内建命令则是I/O命令,例如echo命令。
(2)Shell函数是一系列程序代码,以shell语言写成,它可以像其他命令那样被引用。
(3)外部命令是独立于shell的可执行程序。例如find,grep,echo.sh。命令行shell在执行外部命令时,会创建一个当前shell的复制进程来执行。在执行过程中,存在进程的创建和消亡。
外部命令的执行过程如下:
a.调用POSIX系统fork函数接口,创建一个命令行shell进程的复制(子进程)。
b.在子进程的运行环境中,查找外部命令在Linux文件系统中的位置,如果外部命令给出了完整路径,则略过查找这一步。
c.在子进程里,以新程序带去shell拷贝并执行(exec),此时父进程进入休眠,等待子进程执行完毕。
d.子进程执行完成后,父进程接着从终端读取下一条命令。
示意图如下:
这里写图片描述

1.子进程创建初期和父进程是一模一样的,但是子进程不能够改变父进程的参数变量。
2.只有内建命令才能改变命令行shell的属性设置(环境变量)。

Linux下使用第二种方法和第三种方法执行程序的区别(即 ./demo.sh 和 source demo.sh执行的区别):
使用source执行shell脚本时,并不会创建子进程,而是在父进程中直接执行,因此当使用source执行bash脚本时,可以直接改变父进程的环境变量。
也就是说在使用source执行bash脚本时,并没有进程的创建和消亡过程。
source 语法:
source 文件名 或 . 文件名
描述:
source使用shell进程本身执行脚本文件,source命令也被称作“点命令“,通常用于重新执行刚修改好的初始化文件,使之立即生效。
行为模式:
和其它运行脚本的模式不同,source命令影响shell进程本身,在脚本执行过程中,并没有进程的创建和销毁过程。
Note:
当需要在程序中修改当前shell本身的环境变量时,使用source命令。

欢迎关注我的微信帐号!

微信号:CoderPJ
二维码:
及时查看我发布的博客,请关注我个人的微信公众号!谢谢!

长按图片–>识别二维码即可!

微信公众号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值