///// hello.c文件内容 gcc hello.c -o hello (进程名hello)
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("hello ...\n");
return 0;
}
///// world.c文件内容 gcc world.c -o world (进程名world)
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("world ...\n");
return 0;
}
若不使用“&&”, 那么其shell脚本应该如下. 若hello进程启动成功, 则继续启动world进程, 反之, 则结束。
#!/bin/sh
./hello
if [ $? -eq 0 ]
then
./world
fi
现在修改为使用“&&”命令来替换if. . . else规则. 如下:
#!/bin/sh
# 如果./hello命令启动成功(返回真, 即$? = 0), 则继续启动 ./world进程; 若失败, 则结束.
./hello && ./world
为了测试“&&”的使用规则, 现在启动一个不存在的进程hello_1. 观察其结果:
#!/bin/sh
./hello_1 && ./world
///// start.sh 脚本
#!/bin/sh
./hello || ./world
打印结果:
///// start.sh 脚本
#!/bin/sh
# hello_1成果物是不存在的. 所以hello_1执行失败. 观察world执行情况.
./hello_1 || ./world
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ ls
1.sh hello hello.c start.sh world world.c
# 使用pwd;ls两个组合命令来查看当前位置和文件列表.
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ pwd;ls
/data1/lixiaogang5/work/test/06_29
1.sh hello hello.c start.sh world world.c
为了验证是否生产子shell, 可以使用环境变量 BASH_SUBSHELL. 若返回0, 则表示没有创建子shell; 反之, 若返回1或是其他数字, 则表示创建了子shell进程。
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ (pwd; ls; echo $BASH_SUBSHELL)
/data1/lixiaogang5/work/test/06_29
1.sh hello hello.c start.sh world world.c
1 //echo $BASH_SUBSHELL 返回结果大于0, 表示创建了子shell进程环境.
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ {pwd; ls; echo $BASH_SUBSHELL}
/data1/lixiaogang5/work/test/06_29
1.sh hello hello.c start.sh world world.c
0 //使用花括号方式, echo $BASH_SUBSHELL 返回结果为0, 表示没有创建子shell.
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ (pwd; ls; (echo $BASH_SUBSHELL))
/data1/lixiaogang5/work/test/06_29
1.sh hello hello.c start.sh world world.c
2 //这个时候环境变量BASH_SUBSHELL为2, 表示创建了2个子shell环境》
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ ./hello && ./world || (echo "execute failed.")
hello ...
world ...
# 执行失败范例
lixiaogang5@Cpl-Backend-General-14-115:~/work/test/06_29$ ./hello_1 && ./world || (echo "execute failed.")
bash: ./hello_1: No such file or directory
execute failed.
别忘了点个在看哦!转发那就太好了!