shell命令的执行

1.shell命令分为内置命令和外部命令。

内置命令是shell解释程序内建的,由shell直接执行,不需要派生新的进程

外部命令分为二进制代码和shell脚本。

2.

(1)为了执行外部的二进制命令,需要一种机制,以允许子进程转换为将要被执行的命令。Unix/Linux调用exec可以做到这些。它允许一个进程用其他命令的可执行代码覆盖自己。二进制代码需要由磁盘装入内存中执行。shell解释程序会调用fork自身的一个拷贝,然后用exec系列函数来执行外部命令,这样外部命令就取代了当前的fork的子shell.

(2)shell脚本的执行与二进制文件略有不同。对于shell脚本来说,shell解释程序会fork一个子shell程序,子shell程序会检查脚本的第一行(如#!/bin/bahs),找到用来执行脚本的解释程序,然后装入这个解释程序,由它执行脚本程序。在此解释程序显然是当前shell的子进程。如果这个解释程序与当前使用的shell是同一种shell,比如都是bash,它就是当前shell的子shell,脚本中的命令都是在子shell环境中执行的,不会影响当前shell的环境。

Shell脚本中执行命令是一种常见的操作,可以通过编写一系列顺序执行命令来实现自动化任务。Shell脚本可以包含函数、循环、命令和变量等元素,这些内容组合在一起完成特定的功能[^2]。 ### 执行命令的基本方式 1. **直接编写命令** Shell脚本中的每一行都可以直接写入需要执行命令。例如,在脚本中编写如下代码: ```bash echo "Hello, World!" date ``` 这个脚本会依次执行 `echo` 和 `date` 命令,输出字符串和当前日期。 2. **使用Shebang指定解释器** 通常情况下,Shell脚本的第一行会以 `#!` 开头,并指定使用的解释器路径,例如 `/bin/sh` 或 `/bin/bash`。这样系统就知道用哪个程序来解析和执行该脚本。例如: ```bash #!/bin/bash echo "This script is using Bash." ``` 在保存脚本后,赋予可执行权限并运行它: ```bash chmod +x script.sh ./script.sh ``` 此时脚本会调用指定的解释器执行相应的命令[^4]。 3. **通过子Shell执行脚本** 当执行一个Shell脚本时,默认情况下会在当前Shell(父Shell)环境中开启一个新的子Shell环境来运行脚本。父Shell会暂停运行,等待子Shell执行完毕后再继续。这种方式确保了脚本的执行不会直接影响到当前的Shell环境。例如: ```bash bash script.sh ``` 上述命令明确使用 `bash` 来执行脚本文件,即使脚本本身没有执行权限也可以运行。此时脚本的执行不需要第一行的Shebang声明,因为它已经被显式地作为参数传递给 `bash` 解释器[^1]。 4. **在当前Shell环境中执行脚本** 如果希望脚本在当前Shell中直接执行而不开启子Shell,可以使用 `source` 或 `.` 命令: ```bash source script.sh ``` 或者 ```bash . script.sh ``` 这种方法适用于需要修改当前Shell环境变量或定义函数的情况,因为脚本中的更改会直接作用于当前Shell环境[^1]。 ### 脚本中的注释与可读性 在Shell脚本中,`#` 符号用于表示注释,类似于C语言中的 `//` 注释。除了普通的注释外,如果 `#` 出现在脚本的第一行并且是 `#!` 的形式,则称为 Shebang,用来指定脚本的解释器[^4]。例如: ```bash #!/bin/bash # This is a comment explaining the purpose of the script echo "Script execution started" ``` ### 子Shell与父Shell的关系 当通过子Shell执行脚本时,父Shell会暂停运行,直到子Shell完成任务并返回结果。子Shell继承自父Shell的环境变量,但子Shell中对环境变量的修改不会影响到父Shell[^3]。例如: ```bash #!/bin/bash export MY_VAR="Inside Script" echo $MY_VAR ``` 运行此脚本时,`MY_VAR` 变量仅在子Shell中生效,父Shell中无法访问该变量。 ### 总结 Shell脚本通过按顺序执行命令来完成自动化任务。用户可以选择不同的方式执行脚本,包括直接运行带有执行权限的脚本文件、通过解释器显式执行、或者在当前Shell中加载执行。根据需求选择合适的执行方式可以更好地控制脚本的行为和环境变量的作用范围。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值