博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运行shell脚本的三种方式
阅读量:6677 次
发布时间:2019-06-25

本文共 1511 字,大约阅读时间需要 5 分钟。

先来看一个简单的shell脚本:

#!/bin/shcd /tmpecho "hello,world!"

  我们来挨个解释一下脚本的每一行:

  第一行:#!后面跟的是解释器的路径(shell本身就是一种解释型语言),解释器的路径是/bin/sh;

  第二行:cd命令是切换当前工作目录的命令,tep是linux下根目录的一个子目录;

  第三行:echo命令是输出后面所跟的参数

  三种执行方法:

  第一种:因为shell程序写完之后并没有执行权限,所以该脚本想要执行可以使用chmod命令赋予该脚本可执行的权限,然后再执行。

[root@localhost shell]# chmod +x echo.sh[root@localhost shell]# ./echo,shbash: ./echo,sh: 没有那个文件或目录[root@localhost shell]# ./echo.shhello,world![root@localhost shell]# pwd/root/shell[root@localhost shell]#

  第二种:调用解释器使得脚本执行,例如:bash、csh、csh、ash、bsh、ksh等等;

[root@localhost shell]# sh echo.shhello,world![root@localhost shell]# bash echo.shhello,world! [root@localhost shell]# pwd /root/shell

  第三种:使用source命令;

root@localhost shell]# source echo.shhello,world![root@localhost tmp]# pdwbash: pdw: command not found[root@localhost tmp]# pwd/tmp

  细心的读者可能发现了一个问题:在脚本的第一行有cd命令,这是一个改变工作目录的命令,可是使用第一种和第二种放大执行脚本后当前的工作目录并没有改变(脚本所在的目录是shell文件夹,脚本执行后,使用pwd命令显示出当前的工作目录还是shell),使用第三种方法执行后当前的工作目录就改变了,进入了tmp中。出现这种情况是系统本身执行脚本的方式不同所造成的!

  前两种方法执行脚本时系统会创建一个子进程或者说子shell来执行脚本,原来的进程就是父进程或者说父shell,整个过程中父进程会等待子进程执行完毕,然后子进程退出,父进程也退出。cd命令确实被执行了,但是仅仅是在子进程中改变了工作目录,所以脚本执行完后使用pwd显示工作目录并没有改变。而第三种方法执行的shell脚本的话并不创建子进程,就是在原来的进程中执行,所以最后的工作目录改变了。

 

 

  关于解释型语言和编译型语言

  相对于编译型语言存在的,源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如Python/JavaScript / Perl /Shell等都是解释型语言。
解释型语言:程序不需要 ,程序在运行时才翻译成 ,每执 行一次都要翻译一次。因此效率比较低。比如Basic语言,专门有一个解释器能够直接执行Basic程 序,每个语句都是执行的时候才翻译。(在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨 平台性好.)

 

转载于:https://www.cnblogs.com/scf141592/p/5436664.html

你可能感兴趣的文章
一步一步学ROP之linux_x64篇
查看>>
Kali linux 2016.2(Rolling)里的应用更新和配置额外安全工具
查看>>
js 实现图片实时预览
查看>>
Java 8 Optional类深度解析
查看>>
联想还是那个联想吗?
查看>>
com.panie 项目开发随笔_前后端框架考虑(2016.12.8)
查看>>
BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]
查看>>
ubuntu12.04中shell脚本无法使用source的原因及解决方法
查看>>
备忘录模式
查看>>
git 如何更改某个提交内容/如何把当前改动追加到某次commit上? git rebase
查看>>
eclipse里将java工程改web工程
查看>>
amazon redshift 分析型数据库特点——本质还是列存储
查看>>
C#编程(二十四)----------修饰符
查看>>
[内核]procfs和sysfs
查看>>
R语言中的数据处理包dplyr、tidyr笔记
查看>>
CSS3去除手机浏览器button点击出现的高亮框
查看>>
HBase复制
查看>>
创建cocos2d-x+lua项目
查看>>
基于cancel的不全然恢复
查看>>
CentOS Linux release 7.3源码安装zabbix
查看>>