- &&:多个命令依次运行,某个命令报错后,后面的命令不再执行
- ;:多个命令依次运行,某个命令报错后,后面的命令继续执行
- &:在某个命令后加上&,该命令后台执行
比如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 2,
wait $!等待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的命令的返回值。