shell script执行的几种方式

编写一个shell脚本test.sh,内容如下

a='测试执行方式'
echo $a

方式1

使用路径的方式执行

chmod a+x test.sh
./test.sh

执行结果如下

当脚本执行之后,再执行echo $a的时候,不会得到测试执行方式这个值。因为在运行脚本的时候,是开了一个shell的子进程,脚本执行结束之后,这个子进程也结束了。再回到父进程执行echo $a是得不到任何值的。

方式2

使用sh test.sh执行脚本
执行结果如下:

此种执行方式同方式1

方式3

使用source test.sh执行脚本
执行结果如下:

可以看到,与上述两种方式不同,脚本执行结束之后,echo $a得到了相同的结果。
这是因为使用source执行shell脚本,并不会新开子进程,而是就在当前进程来执行,所以脚本执行结束之后,变量的值还能获取到

原文地址:https://www.cnblogs.com/feanmy/p/shell-script-execution.html

时间: 03-17

shell script执行的几种方式的相关文章

iOS:延时执行的三种方式

延时执行的三种方式:performSelectorXXX方法.GCD中延时函数.创建定时器 第一种方式:NSObject分类当中的方法,延迟一段时间调用某一个方法 @interface NSObject (NSDelayedPerforming) ※延时调用在当前线程使用特定模式的方法(如果数组没有数据或者参数为nil,则不会调用selector中方法) - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterD

IOS中延时执行的几种方式的比较和汇总

本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.performSelector方法 [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1.0f]; 此方式要求必须在主线程中执行,否则无效.是一种非阻塞的执行方式,暂时未找到取消执行的方法. 2.定时器:NSTimer [NS

PHP定时执行的三种方式实现

1.windows 的计划任务2.linux的脚本程序3.让web浏览器定时刷新 具体实现 1.windows计划任务 PHP很少在win服务器上跑,具体实现也不再深究,看网上实现的原理大概是写bat脚本,然后让window任务添加执行这个bat脚本: 在网上找了些WINDOWS执行PHP的计划任务的方法,有一个写得很全,可惜在我这竟然没通过.最后不得不综合各门派的方法,才能在我这运行成功. 1.写一个PHP程序,命名为test.php,内容如下所示: <? $fp = fopen("te

Bash shell 的算术运算有四种方式

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1:使用 expr 外部程式加法 r=`expr 4 + 5`echo $r注意! '4' '+' '5' 这三者之间要有空白r=`expr 4 * 5` #错误乘法 r=`expr 4 \* 5`~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2:使用 $(( ))r=$(( 4 + 5 ))echo $r~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~3:使用 $[ ]r=$[ 4 + 5

延时执行的三种方式

1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view, typically from a nib. 5 } 6 7 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 8 { 9 NSLog(@"-----touchesBegan1-----"); 10 11 1

iOS常见的延时执行有2种方式

调用NSObject的方法 [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; // 2秒后再调用self的run方法 使用GCD函数 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // 2秒后异步执行这里的代码... });

Linux中执行shell脚本命令的4种方法总结

bash shell 脚本的方法有多种,现在作个小结.假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时,称为工作目录)执行shell脚本: 复制代码 代码如下: cd /data/shell ./hello.sh ./的意思是说在当前的工作目录下执行hello.sh.如果不加上./,bash可能会响应找到不到hello.sh的错误信息.因为目前的工作目录(/data/shell)可能不在

Zabbix+shell两种方式监控任意web并及时报警

最近有朋友问我怎么监控公司网站:目的是网站不能访问及时报警. 当然一些云服务器肯定是自带功能,可是物理服务器可没有那么智能,但是开源是强大的,这里就分享一下个人监控网站的两种方式. 一.zabbix自带的web检测: 1.1)配置>主机(需联网)>web场景>创建web场景 添加你所需要检测网站的url 1.2)创建触发器(邮件报警,短信报警,微信报警提前配置其一即可) 1.3)监测中>Web检测 1.4)触发 二.shell+nc+namp等工具+crontab #!/bin/b

C#执行异步操作的几种方式比较和总结

原文出处: Durow(@Durow)   欢迎分享原创到伯乐头条 0×00 引言 之前写程序的时候在遇到一些比较花时间的操作例如HTTP请求时,总是会new一个Thread处理.对XxxxxAsync()之类的方法也没去了解过,倒也没遇到什么大问题.最近因为需求要求用DevExpress写界面,跑起来后发现比Native控件效率差好多.这才想到之前看到的“金科玉律”:不要在UI线程上执行界面无关的操作,因此集中看了下C#的异步操作,分享一下自己的比较和总结. 0×01 测试方法 IDE:VS2

该种方式是将待执行的代码放入try中

该种方式是将待执行的代码放入try中,如果执行的代码发生异常就会被catch,从而执行catch中的代码. (2)再来看一下throw:该种抛出异常的方式比较直接 ? 1 2 3 if(age < 0){ throw new MyException("年龄不能为负数!"); } 可以看出是直接抛出一种具体的异常. 二.声明异常throws java中可以对一个方法在定义时就进行异常的声明,而后在实现时可以利用throw具体的抛出异常. ? 1 2 3 4 5 6 7 8 9 10