详解shell中source、sh、bash、.执⾏脚本的区别1、source命令⽤法:
  source FileName
  作⽤:在当前bash环境下读取并执⾏FileName中的命令。该filename⽂件可以⽆"执⾏权限"
注:该命令通常⽤命令“.”来替代。
如:source .bash_profile
. .bash_profile两者等效。
source(或点)命令通常⽤于重新执⾏刚修改的初始化⽂档。
source命令(从 C Shell ⽽来)是bash shell的内置命令。
点命令,就是个点符号,(从Bourne Shell⽽来)。
2、sh和bash命令⽤法:
sh FileName
bash FileName
作⽤:在当前bash环境下读取并执⾏FileName中的命令。该filename⽂件可以⽆"执⾏权限"
注:两者在执⾏⽂件时的不同,是分别⽤⾃⼰的shell来跑⽂件。
sh使⽤“-n”选项进⾏shell脚本的语法检查,使⽤“-x”选项实现shell脚本逐条语句的跟踪,
可以巧妙地利⽤shell的内置变量增强“-x”选项的输出信息等。
3、./的命令⽤法:
./FileName
作⽤:打开⼀个⼦shell来读取并执⾏FileName中命令。
注:运⾏⼀个shell脚本时会启动另⼀个命令解释器.
每个shell脚本有效地运⾏在⽗shell(parent shell)的⼀个⼦进程⾥.
这个⽗shell是指在⼀个控制终端或在⼀个xterm窗⼝中给你命令指⽰符的进程.
shell脚本也可以启动他⾃已的⼦进程.
这些⼦shell(即⼦进程)使脚本并⾏地,有效率地地同时运⾏脚本内的多个⼦任务.
shell的嵌⼊命令:
: 空,永远返回为true
.  从当前shell中执⾏操作
break 退出for、while、until或case语句
cd 改变到当前⽬录
continue 执⾏循环的下⼀步
echo 反馈信息到标准输出
eval 读取参数,执⾏结果命令
exec 执⾏命令,但不在当前shell
exit 退出当前shell
export 导出变量,使当前shell可利⽤它
pwd 显⽰当前⽬录
read 从标准输⼊读取⼀⾏⽂本
readonly 使变量只读
return 退出函数并带有返回值
set 控制各种参数到标准输出的显⽰
shift 命令⾏参数向左偏移⼀个
test 评估条件表达式
times 显⽰shell运⾏过程的⽤户和系统时间
trap 当捕获信号时运⾏指定命令
shell代码
ulimit 显⽰或设置shell资源
umask 显⽰或设置缺省⽂件创建模式
unset 从shell内存中删除变量或函数
wait 等待直到⼦进程运⾏完毕
下⾯再看下 shell 脚本各种执⾏⽅式(source ./*.sh, . ./*.sh, ./*.sh)的区别
结论⼀: ./*.sh的执⾏⽅式等价于sh ./*.sh或者bash ./*.sh,此三种执⾏脚本的⽅式都是重新启动⼀个⼦shell,在⼦shell中执⾏此脚本。
结论⼆: .source ./*.sh和 . ./*.sh的执⾏⽅式是等价的,即两种执⾏⽅式都是在当前shell进程中执⾏此脚本,⽽不是重新启动⼀个shell ⽽在⼦shell进程中执⾏此脚本。
验证依据:没有被export导出的变量(即⾮环境变量)是不能被⼦shell继承的
验证结果:
[root@localhost ~]#name=dangxu    //定义⼀般变量
[root@localhost ~]# echo ${name}
dangxu
[root@localhost ~]# cat test.sh  //验证脚本,实例化标题中的./*.sh
#!/bin/sh
echo ${name}
[root@localhost ~]# ls -l test.sh  //验证脚本可执⾏
-rwxr-xr-x 1 root root 23 Feb 6 11:09 test.sh
[root@localhost ~]# ./test.sh    //以下三个命令证明了结论⼀
[root@localhost ~]# sh ./test.sh
[root@localhost ~]# bash ./test.sh
[root@localhost ~]# . ./test.sh  //以下两个命令证明了结论⼆
dangxu
[root@localhost ~]# source ./test.sh
dangxu
[root@localhost ~]#
总结
以上所述是⼩编给⼤家介绍的shell中source、sh、bash、./执⾏脚本的区别,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。