运行shell脚本的三种方式
来源:互联网 发布:java ssh jar 编辑:程序博客网 时间:2024/04/27 01:53
先来看一个简单的shell脚本:
1
2
3
#!/bin/sh
cd
/tmp
echo
"hello,world!"
我们来挨个解释一下脚本的每一行:
第一行:#!后面跟的是解释器的路径(shell本身就是一种解释型语言),解释器的路径是/bin/sh;
第二行:cd命令是切换当前工作目录的命令,tep是linux下根目录的一个子目录;
第三行:echo命令是输出后面所跟的参数
三种执行方法:
第一种:因为shell程序写完之后并没有执行权限,所以该脚本想要执行可以使用chmod命令赋予该脚本可执行的权限,然后再执行。
1
2
3
4
5
6
7
8
[root@localhost shell]
# chmod +x echo.sh
[root@localhost shell]
# ./echo,sh
bash
: .
/echo
,sh: 没有那个文件或目录
[root@localhost shell]
# ./echo.sh
hello,world!
[root@localhost shell]
# pwd
/root/shell
[root@localhost shell]
#
第二种:调用解释器使得脚本执行,例如:bash、csh、csh、ash、bsh、ksh等等;
1
2
3
4
[root@localhost shell]
# sh echo.sh
hello,world!
[root@localhost shell]
# bash echo.sh
hello,world!<br>[root@localhost shell]
# pwd<br><em id="__mceDel">/root/shell</em>
第三种:使用source命令;
1
2
3
4
5
6
root@localhost shell]
# source echo.sh
hello,world!
[root@localhost tmp]
# pdw
bash
: 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程 序,每个语句都是执行的时候才翻译。(在运行程序的时候才翻译,专门有一个解释器去进行翻译,每个语句都是执行的时候才翻译。效率比较低,依赖解释器,跨 平台性好.)
阅读全文
0 0
- 运行shell脚本的三种方式
- 运行shell脚本的两种方式
- 执行shell脚本的三种方式
- shell脚本的三种执行方式
- shell脚本的三种调用方式
- shell 的三种运行方式
- 运行Shell脚本的几种方式解析
- mongodb shell 运行js脚本的四种方式
- Linux-Shell脚本的运行方式
- shell脚本文件的三种执行方式
- c语言中调用shell脚本的三种方式
- Linux shell脚本:数学运算的三种方式
- bash shell脚本访问PostgreSQL的三种方式
- shell脚本的作用,shell脚本变量的定义和三种赋值方式【shell脚本的学习笔记一】
- 在 Shell 脚本中调用另一个 Shell 脚本的三种方式
- 【shell】shell脚本的调试方式(三 )
- Shell脚本的运行
- shell脚本运行方式和对环境变量的影响
- 图像风格迁移-Image Style Transfer Using Convolutional Neural Networks
- 河南省多校连萌(一) E题【kruskal】
- SpringMVC与Struts2区别与比较总结
- java-se object
- python015 Python3 函数
- 运行shell脚本的三种方式
- 14个常用的javaScript正则表达式
- 刷题记录luoguP1972 [SDOI2009]HH的项链
- 最大公约数算法
- 宏定义中的反斜杠"\"和宏定义的细节说明
- STM32控制步进电机实现精确转动
- 静态代码块,构造代码块,构造方法的加载执行顺序研究
- C语言实现C++的封装继承与多态
- 手机ios安卓扫描车牌识别SDK