Shell执行脚本
Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命令执行完。
如下例子:
第一种执行方式:chmode+x script.sh
执行过程:
Shell会fork一个子进程并调用exec执行./script.sh这个程序,exec系统调用会把子进程代码段替换成./script.sh程序的代码段,exec有一种机制,如果要执行的是一个文本文件,并且第一行Shebang 指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器 的_start开始执行,而这个文本文件被当作命令行参数传给解释器
第二种执行方式:
shell执行过程:
1. 交互Shell(bash)fork/exec一个子Shell(sh)用于执行脚本,父进程bash等待子进程sh终 止。
2. sh读取脚本中的cd ..命令,调用相应的函数执行内建命令(不创建子进程,父进程运行),改变当前工作目录为上一级目 录。
3. sh读取脚本中的ls命令,fork/exec这个程序,列出当前工作目录下的文件,sh等待ls终止。
4. ls终止后,sh继续执行,读到脚本文件末尾,sh终止。
5. sh终止后,bash继续执行,打印提示符等待用户输入。
两种方法执行Shell脚本的效果是相同的,cd ..命令改变的是子Shell的PWD,而不会影响到 交互式Shell。
source ./script.sh或者. ./script.sh命令:
source或者.命令是Shell的内建命令,这种方式也不会创建子Shell,而是直接在交互式Shell下逐行 执行脚本中的命令。
Shell执行脚本的更多相关文章
- 【Telnet】使用Telnet协议连接到远程Shell执行脚本
介绍 本文介绍如何通过Telnet协议连接到远程Shell,执行脚本,并获取执行结果: 相关文章: <[Jsch]使用SSH协议连接到远程Shell执行脚本>http://www.cnbl ...
- 【Jsch】使用SSH协议连接到远程Shell执行脚本
如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉,ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接,SSH 在连接和传送的过程中会加密所有的数据. 但是SSH一般 ...
- shell脚本学习—Shell执行脚本
Shell作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行这一条,这种方式称为交互式,但还有另一种执行命令的方式称为批处理方式,用户事先写一个Shell脚本,Shell可以一次把这些命 ...
- python模拟shell执行脚本
工作时候需要模拟shell来执行任务,借助包paramkio import paramiko class ShellExec(object): host = '127.0.0.1' port = 36 ...
- 简单shell执行脚本
#!/bin/bash source /etc/profile APPLICATIONS_HOME="/opt/cpic_analy" APPLICATION_NAME=" ...
- ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...
- Linux系列教程(二十)——Linux的shell概述以及如何执行脚本
从这篇博客开始,我们将进入Linux的shell脚本的学习,这对于Linux学习爱好者而言是特别重要的一节,也是特别有意思的一节,shell 脚本就像我们知道的Java,php类似的编程语言一样,通过 ...
- linux shell判断脚本执行时传入了多少个参数,判断脚本参数个数,参数数量
需求描述: 在写shell脚本的时候,会有这样的需求,脚本在执行的过程中是需要传入参数的,如果没有参数传递给脚本, 就会给出相应的脚本使用方法或者例子,告知,脚本后面应该加什么样的参数.所以呢,这里要 ...
- shell执行mysql的脚本(包括mysql执行shell脚本)
在Shell中执行mysql的脚本,这里介绍比较容易使用的一种方法 首先写好sql的脚本,后缀为.sql,比如 sql_file.sql:内容如下 #这是SQL的脚本create table if n ...
随机推荐
- SqlSugar
SqlSugar 官网 SqlSugar 源码 SqlSugar NuGet
- C# 面向对象5 this关键字和析构函数
this关键字 1.代表当前类的对象 2.在类当中显示的调用本类的构造函数(避免代码的冗余) 语法: ":this" 以下一个参数的构造函数调用了参数最全的构造函数!并赋值了那些不 ...
- 【electronjs入门教程 】electronjs 介绍
官网地址:https://electronjs.org/ 官网文档地址:https://electronjs.org/docs/ electronjs使用 JavaScript, HTML 和 CSS ...
- python、第三篇:表相关操作
一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:https://www.cnblogs.com/Forever-x/p/11317479.html 二 表介绍 ...
- SecureCRT 连接 Centos7.0 (桥接模式),且能连接公网。
1.查看本地网络信息 ip:172.20.10.7 2.在VMware下配置Centos为桥接模式: 3.在Centos命令行输入 ip addr 查看Centos的mac地址 网口:eno16777 ...
- 解决 android studio 出现:"AndroidStudio:Could not GET 'https://dl.google.com Received status code 400 from server: Bad Request"问题
一.android studio 编译项目时出现"AndroidStudio:Could not GET 'https://dl.google.com Received status cod ...
- PAT Basic 1016 部分A+B (15 分)
正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 8,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 ...
- 使用NPOI或POI 导出Excel大数据(百万级以上),导致内存溢出的解决方案(NPOI,POI)
使用工具:POI(JAVA),NPOI(.Net) 致谢博主 Crazy_Jeff 提供的思路 一.问题描述: 导出任务数据量近100W甚至更多,导出的项目就会内存溢出,挂掉. 二.原因分析: 1.每 ...
- 页面内置函数${fn:}
引入头文件<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions " %&g ...
- CUDA warning C4819的消除
问题描述:在使用VS2010编译CUDA程序时,有很多C4819警告: warning C4819:The file contains a character that cannot be repre ...