shell-1脚本执行过程

1.基本概念

  • sh(Bourne shell):UNIX系统上最早出现的shell,不支持job control和命令历史等功能,主要用于执行脚本。
  • bash(Bourne Again Shell):由GNU开发的shell,在sh的基础上增加了很多交互功能,bash向后兼容sh。反之则不亦然。

2.SHELL执行命令过程

在交互shell的命令窗口,用户在命令行输入命令后,一般情况下shell会fork并exec该命令,但是shell的内建命令例外,执行内建命令相当于调用shell进程中的一个函数,并不创建新的进程。

用type命令查看是否为内建命令,内建命令没有单独的man手册 ,在man手册中查看内建命令:
$man bash-builtins
$type cd 查看cd是否为内建命令

内建命令也可用$?显示命令执行结果。

$ cd xxx
-bash: cd: xxx: No such file or directory
$ echo $?
1

2.1建立脚本script.sh:

#!/bin/sh
cd ..
ls

Shell脚本中用#表示注释,但如果#位于第一行开头,并且是#!(称为Shebang)则它表示该脚本使用后面指定的解释器/bin/sh解释执行。

2.2执行过程

目录结构体如下:

shell
├── test
│   └── script.sh
└── test_a
  • 不需要可执行权限执行脚本
test$  /bin/sh ./script.sh
test  test_a
  • 添加可执行权限:
test$ chmod +x script.sh
test$ ./script.sh
test  test_a

上述两种方法本质一样,执行脚本的步骤为:

  1. 交互shell(bash)fork并exec一个子shell(sh)用于执行脚本,bash等待sh终止。
  2. sh读取脚本中的cd …命令,调用相应的函数执行内建命令,置环境变量PWD为上一级目录。
  3. sh读取脚本中的ls命令,fork并exec这个程序,列出当前目录的文件,sh等待ls终止。
  4. ls终止后,sh继续执行,读到脚本末尾,sh终止。
  5. sh终止后,bash继续执行,打印提示符等待用户输入。
    在这里插入图片描述

2.3 内建命令source和.执行shell

这种方式也不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令。脚本不需要有可执行权限。

test $. ./script.sh
test  test_a
shell$

命令行执行命令

命令行下输入的命令用()括号括起来,那么也会fork出一个子Shell执行小括号中的命令,一行中多个命令用“;”隔开

test $(cd ..;ls -l)   不会改变当前目录,显示上一级目录的列表。  
test  test_a
test $
test $cd ..;ls -l      到上一级目录,显示上级目录的列表
test  test_a
shell $

参考

Linux C编程一站式学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值