当前位置: 首页 > 科技观察

下面说说脚本的执行方法,你学会了吗?

时间:2023-03-13 01:03:45 科技观察

本文转载自微信公众号《Linux常用命令》,作者姚生。转载本文请联系Linux常用命令公众号。shell脚本的后缀一般为“.sh”,脚本的第一行一般指向执行shell,如“#!/bin/bash”。【#!】指定解释脚本执行的Shell。有许多方法可以执行Shell脚本。我们可以直接使用[shxx.sh]或[bashxx.sh]来执行Shell,也可以使用[./xx.sh]、[/shell/xx.sh]或[source.sh]、[.xx.sh]。它们之间有什么区别?测试脚本如下:[root@yaommshell]#cattestShell.sh##?查看demoShell脚本#!/bin/bashcd/opt;#切换到/opt目录,进入pwds=`pwd`;#查看当前路径pids=$$;#查看当前进程users=`whoami`;#查看当前用户echo"当前路径:${pwds},当前进程PID:${pids},当前用户:${users}"sh模式执行(也可以用bash):[root@yaommshell]#echo$$##查看当前cli(命令行)界面的进程号22524##每次登录shell打开的shell界面进程号[root@yaommshell]#shtestShell.sh##使用bash执行当前路径:/opt,当前进程PID:10836,当前用户:root##输出当前切换路径,进程号,用户名[root@yaommshell]#echo$users##在子shell中变量打印为空,以相对路径方式执行(也可以使用绝对路径):[root@yaommshell]#./testShell.sh##使用路径执行,无权限-bash:./testShell.sh:Permissiondenied##没有执行权限sion[root@yaommshell]#chmod+xtestShell.sh##赋予执行权限[root@yaommshell]#./testShell.sh##使用路径执行当前路径:/opt,当前进程PID:10873,当前用户:root##类似bash执行结果[root@yaommshell]#echo$users##子shell中的变量打印为空源执行(也可以用点号):[root@yaommshell]#sourcetestShell.sh##使用source执行当前路径:/opt,当前进程PID:22524,当前用户:root##进程号[root@yaommopt]###看到当前目录已经切换到/opt[root@yaommopt]#echo$users##source执行,子shell中的变量赋值root##?$users成为全局环境变量,但是再次登录shell后,还是会消失sh,source可以在没有执行权限的情况下运行shell脚本,为什么呢?因为Shell脚本只是作为参数传递给sh、bash、source命令,使用bash脚本和路径执行的权限,使用的是脚本文件本身的执行权限,所以需要授予x。sh和source执行之间也有区别。sh执行脚本会开启(fork)一个子进程(也叫子shell、子shell),shell脚本中的环境变化不会影响当前的shell进程(parentprocess、parentshell)。source不创建SubShell,而是在当前Shell环境下读取并执行脚本文件中的命令,相当于依次读取并执行“.sh”文件中的命令。执行脚本还有其他方式,不常用,这里不再赘述。最后用一张表总结一下Shell执行的几种方式和区别。执行命令示例权限开启子进程说明sh,bashbashtest.sh,htest.sh不需要sh,bash都用/usr/bin/bash./,/./test.sh,/shell/test.shneed是相对路径或绝对路径执行,需要脚本文件的执行权限。source.test.sh和sourcetest.sh不需要点+空格就相当于source,source执行脚本相当于逐行读取脚本中的语句,在Commandlineinterfaceexecution<,|中输入sh>test.sh,cattst.sh|bash不需要为带参数的脚本执行。exec./test.sh需要替换当前进程资源,不要在命令行界面执行,否则会直接关闭登录shell界面