sh脚本中.和sh执⾏的区别以及shell的执⾏⽅式
1  ./需要执⾏权限,使⽤脚本⽂件中第⼀⾏#!指定的shell(解释器)来执⾏命令(譬如常见的/bin/bash),不指定系统会调⽤默认shell程序
2  sh不需要执⾏权限,是使⽤sh这个shell执⾏命令,是个软链接,它可能是⼀个任意的shell,通常默认是bash shel,⽤type命令可以查看
3  shell的执⾏⽅式
先来看⼀个简单的shell脚本:
1 2 3#!/bin/sh
cd/tmp echo"hello,world!"
  我们来挨个解释⼀下脚本的每⼀⾏:
  第⼀⾏:#!后⾯跟的是解释器的路径(shell本⾝就是⼀种解释型语⾔),解释器的路径是/bin/sh;
  第⼆⾏:cd命令是切换当前⼯作⽬录的命令,tep是linux下根⽬录的⼀个⼦⽬录;
  第三⾏:echo命令是输出后⾯所跟的参数
  三种执⾏⽅法:
  第⼀种:因为shell程序写完之后并没有执⾏权限,所以该脚本想要执⾏可以使⽤chmod命令赋予该脚本可执⾏的权限,然后再执⾏。
[root@localhost shell]# chmod +x echo.sh
[root@localhost shell]# ./echo.sh
hello,world!
[root@localhost shell]# pwd
/root/shell
[root@localhost shell]#
 第⼆种:调⽤解释器使得脚本执⾏,例如:bash、csh、csh、ash、bsh、ksh等等;
[root@localhost shell]# sh echo.sh
hello,world!
[root@localhost shell]# bash echo.sh
hello,world!
[root@localhost shell]# pwd
/root/shell
第三种:使⽤source命令;
root@localhost shell]# source echo.sh
hello,world!
[root@localhost tmp]# pwd
/tmp
当前页面脚本发生错误 细⼼的读者可能发现了⼀个问题:在脚本的第⼀⾏有cd命令,这是⼀个改变⼯作⽬录的命令,可是使
⽤第⼀种和第⼆种放⼤执⾏脚本后当前的⼯作⽬录并没有改变(脚本所在的⽬录是shell⽂件夹,脚本执⾏后,使⽤pwd命令显⽰出当前的⼯作⽬录还是shell),使⽤第三种⽅法执⾏后当前的⼯作⽬录就改变了,进⼊了tmp中。出现这种情况是系统本⾝执⾏脚本的⽅式不同所造成的!
  前两种⽅法执⾏脚本时系统会创建⼀个⼦进程或者说⼦shell来执⾏脚本,原来的进程就是⽗进程或者说⽗shell,整个过程中⽗进程会等待⼦进程执⾏完毕,然后⼦进程退出,⽗进程也退出。cd命令确实被执⾏了,但是仅仅是在⼦进程中改变了⼯作⽬录,所以脚本执⾏完后使⽤pwd显⽰⼯作⽬录并没有改变。⽽第三种⽅法执⾏的shell脚本的话并不创建⼦进程,就是在原来的进程中执⾏,所以最后的⼯作⽬录改变了