linux的&&和;和&,$! $? sleep wait exit

  • &&:多个命令依次运行,某个命令报错后,后面的命令不再执行
  • ;:多个命令依次运行,某个命令报错后,后面的命令继续执行
  • &:在某个命令后加上&,该命令后台执行
    比如pwd&sleep 1会打印当前目录后等待1s。sleep 1&pwd打印当前目录后退出。
    比如exit会关闭shell窗口,exit &不会。

$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1…9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$ @ 跟$*类似,但是可以当作数组用

exit 的返回值需要设定在0-255

一些例子

(sleep 6; exit 222)& echo 1&&sleep 2;echo 2;wait $!;echo $?
	输出1,休息2s,输出2,休息4s,输出222
	分析:
		后台执行(sleep 6; exit 222),
		sleep2,echo 2,wait $!等待(sleep 6; exit 222)的结果,echo $?输出其结果
		(wait $!等待后台运行的最后一个进程的进程ID号,即sleep 6; exit 222,因为该命令后面加了&)
sleep 6; exit 222& echo 1&&sleep 2;echo 2;wait $!;echo $?
	休息6s,输出1,休息2s,输出2,输出222
	分析:
		后台执行exit 222,所以不会退出,且echo $?输出该命令的返回值
(sleep 6; exit 222)& echo 1&&sleep 2;echo 2&wait $!;echo $?
	输出1,休息2s,输出2,输出0
	分析:
		后台执行(sleep 6; exit 222),后台执行echo 2wait $!等待echo 2,echo $?输出echo 2的返回值。
		不等待(sleep 6; exit 222),所以2s后结束。

等待多个后台命令完成

(sleep 3;echo 13; exit 113)& p3=$!;(sleep 1;echo 11; exit 111)& p1=$!;wait $p3 $p1;echo $?
或者(sleep 3;echo 13; exit 113)& p3=$!;(sleep 1;echo 11; exit 111)& p1=$!;wait $p3;wait $p1;echo $?
	休息1s,输出11,休息2s,输出13,输出111
	分析:
		后台执行(sleep 3;echo 13; exit 113),赋值该命令pid给p3,
		后台执行(sleep 1;echo 11; exit 111),赋值该命令pid给p1,
		等待p3的命令完成,再等待p1的命令完成(早已经完成),输出p1的命令的返回值。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值