shell完结

news/2024/11/28 10:53:07/

声明!
学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)

脚本之间的相互调用

在 Shell 脚本中,可以通过多种方式实现脚本之间的调用:

 直接调用

```bash
# 假设 2.sh 包含以下内容:
echo "hello"# 创建 3.sh,内容如下:
. 2.sh  # 或者 source 2.sh


 

说明:
- source`或 .`:将被调用脚本(`2.sh`)加载到当前 Shell 进程中执行,变量和环境会共享。例如:
  - `2.sh` 中的变量在 `3.sh` 中依然可用。
  - 没有启动新的 Shell 进程。

执行结果:
运行 `bash 3.sh` 输出:

hello

 2. 使用子 Shell 调用
 

`bash
假设 2.sh 包含以下内容:
echo "hello"# 创建 3.sh,内容如下:
bash 2.sh

说明:
- **`bash` 或其他 Shell 直接运行脚本**:被调用脚本在独立的子 Shell 中运行,变量和环境不共享。
- 适用于需要隔离上下文的情况。

执行结果:
运行 `bash 3.sh` 输出:hello
 

3. 使用脚本作为函数库
将常用的函数或逻辑放在一个脚本中供其他脚本调用。例如:

创建 `utils.sh`:
`

``bash
log_message() {echo "Log: $1"
}


 

创建 `main.sh`:

bash
source utils.sh
log_message "This is a test message.


 

执行结果:
运行接过
Log: This is a test message.
 

 重定向:输出重定向和输入重定向

重定向用于将输入或输出流从默认位置(如终端)重定向到文件或其他流。### **1. 输出重定向**

将命令的输出保存到文件中。

语法:

```bash
command > file   # 覆盖写入
command >> file  # 追加写入

示例:

```bash
echo "Hello, World!" > output.txt
echo "Appending line" >> output.txt
```

说明:
- `>` 覆盖写入,文件中原有内容会被清除。
- `>>` 追加写入,内容会追加到文件末尾。

2. 输入重定向

将文件内容作为命令的输入。语法:

```bash
command < file
```#### **示例:**
```bash
cat < input.txt

说明:
- `<` 将文件 `input.txt` 的内容作为 `cat` 的输入。

---

3. 错误输出重定向

默认情况下,错误输出(标准错误流)不会与标准输出一起被重定向。可以单独或同时重定向错误输出。

语法:
`

``bash
command 2> file   # 将错误输出重定向到文件(覆盖写入)
command 2>> file  # 将错误输出追加到文件末尾
command > file 2>&1  # 同时重定向标准输出和错误输出


. 同时重定向标准输出和错误输出语法:

```bash
command > output.txt 2>&1  # 输出和错误都写入 output.txt
```#### **示例:**
```bash
ls /valid/path /invalid/path > all_output.txt 2>&1
```

说明:
- `2>&1` 表示将文件描述符 2(错误输出)指向文件描述符 1(标准输出)。
- 所有输出(标准和错误)都保存到 `all_output.txt`。

---

Here Document(多行输入重定向)

将多行内容作为命令的输入。#### **语法:

```bash
command << EOF
多行内容
EOF
```#### **示例:**
```bash
cat << EOF
This is line 1
This is line 2
EOF

说明:
- `EOF` 是结束标志,可以自定义(如 `END`)。
- 多行内容会作为输入传递给 `cat`。

文件描述符

在 Unix 系统中,每个进程有三个默认的文件描述符:
1. 标准输入(stdin,文件描述符:0):
   - 默认从终端或文件读取输入。
   - 可通过 `<` 重定向输入。
2. 标准输出(stdout,文件描述符:1):
   - 默认将命令的输出打印到终端。
   - 可通过 `>` 或 `>>` 重定向输出。
3. 标准错误(stderr,文件描述符:2):
   - 默认将错误信息输出到终端。
   - 可通过 `2>` 重定向错误输出。

---

综合示例

示例 1:同时重定向标准输出和错误输出
```bash
# 脚本内容 test.sh:
echo "This is standard output"
ls /invalid/path
echo "This is another standard output"

# 执行并重定向:
bash test.sh > output.txt 2> error.txt
```

结果:
- `output.txt` 包含:
  ```
  This is standard output
  This is another standard output
  ```
- `error.txt` 包含:
  ```
  ls: cannot access '/invalid/path': No such file or directory
  ```

---

示例 2:将文件内容追加写入另一文件
bash
# 将输入文件的内容追加到目标文件中
cat input.txt >> output.txt
 

### **示例 3:错误与标准输出的分离与合并**
```bash
# 创建脚本 combine.sh
echo "This is standard output"
ls /non_existent_file

# 运行脚本并分别保存输出和错误:
bash combine.sh > stdout.txt 2> stderr.txt

# 同时合并输出和错误:
bash combine.sh > combined.txt 2>&1
```

**结果:**
- `stdout.txt` 包含:
  ```
  This is standard output
  ```
- `stderr.txt` 包含:
  ```
  ls: cannot access '/non_existent_file': No such file or directory
  ```
- `combined.txt` 包含两部分内容。


http://www.ppmy.cn/news/1550599.html

相关文章

PyTorch基础学习03_数学运算自动微分

目录 一、数学运算 1、基本操作 2、三角函数 3、统计学函数 二、保存和加载 三、并行化 四、自动微分 1、相关概念 2、计算梯度 1.标量梯度计算 2.向量梯度计算 3.多标量梯度计算 4.多向量梯度计算 5.矩阵梯度计算 3、梯度上下文控制 1、梯度控制 2、梯度更新…

echarts使用示例

柱状图折线图 折柱混合&#xff1a;https://echarts.apache.org/examples/zh/editor.html?cmix-line-bar option {title:{show: true},tooltip: {trigger: axis,axisPointer: {type: cross,crossStyle: {color: #999}}},toolbox: {feature: {dataView: { show: true, readOnl…

Ubuntu20.04运行DM-VIO

目录 环境配置非ROS环境运行编译运行结果图 ROS环境参考 环境配置 Ubuntu20.04 将项目中Cmakelists.txt中C 和 opencv版本修改下 C 使用 14 opencv使用4 非ROS环境运行 编译 按照官网即可 cd dm-vio mkdir build cd build cmake .. make -j运行 DM-VIO给的命令是 bin/d…

在 JavaScript 中,将一个十进制字符串转为二进制的方法

在 JavaScript 中&#xff0c;可以使用以下几种方法将一个十进制字符串转为二进制&#xff1a; 方法一&#xff1a;使用 parseInt() 和 toString() 首先&#xff0c;使用 parseInt() 函数将十进制字符串转换为十进制整数。 parseInt() 函数会解析传入的字符串&#xff0c;并根…

firewalld防火墙阻止docker容器间通信的排查思路及解决方案

摘要 现有两个docker容器nginx、openjdk分别部署前后端服务&#xff0c;假设默认防火墙为firewalld&#xff0c;发现在默认配置下&#xff0c;本地直接curl后台服务器能正确响应&#xff0c;nginx的代理的请求proxy_pass无法得到后台服务器的响应&#xff0c;只得到502 BadGat…

[产品管理-156]:《领先的密码-BLM方法论全面解读与应用指南》- 全书概述

目录 前言&#xff1a; 一、BLM方法论概述 二、BLM方法论的核心要素 三、BLM方法论的应用指南 四、BLM方法论的实际应用案例 五、总结 前言&#xff1a; “领先的密码&#xff1a;BLM方法论全面解读与应用指南”这一主题涉及对Business Leadership Model&#xff08;业务…

DataWhale—PumpkinBook(TASK06神经网络)

课程开源地址及相关视频链接&#xff1a;&#xff08;当然这里也希望大家支持一下正版西瓜书和南瓜书图书&#xff0c;支持文睿、秦州等等致力于开源生态建设的大佬✿✿ヽ(▽)ノ✿&#xff09; Datawhale-学用 AI,从此开始 【吃瓜教程】《机器学习公式详解》&#xff08;南瓜…

探索 Python 任务自动化的新境界:Invoke 库揭秘

文章目录 探索 Python 任务自动化的新境界&#xff1a;Invoke 库揭秘背景&#xff1a;为何选择 Invoke&#xff1f;什么是 Invoke&#xff1f;如何安装 Invoke&#xff1f;5个简单的库函数使用方法1. 定义任务2. 带参数的任务3. 运行 Shell 命令4. 任务参数化5. 列出任务 场景应…