Shell编程规范与变量:Shell编程前的必要基础知识



1. 查看进程的父子关系

1.1 使用 ps -ef --forest

  • 功能ps -ef --forest 用于以树形结构显示系统中的进程及其父子关系,有助于理解进程的派生关系和层级结构。

  • 命令详解

    • ps -ef:显示系统中所有进程的信息,包括用户、进程ID(PID)、父进程ID(PPID)、启动时间等详细内容。
    • -forest:以树形结构展示进程的父子关系。
  • 示例

    ps -ef --forest 
    
  • 输出解释:输出结果是一个树形结构,展示每个进程及其子进程的派生关系。

1.2 子Shell与进程关系

在Bash中,执行某些命令(如括号包围的命令或执行Shell脚本)时会产生子Shell,子Shell作为新的进程与父Shell关联。

  • 父子进程关系:在 ps -ef --forest 的输出中,子Shell通常显示为父Shell的子节点。
  • Shell脚本:当运行一个Shell脚本时,通常会启动一个新的子Shell(例如 /bin/bash),该子Shell会执行脚本中的所有命令。

示例

ps -ef --forest | grep bash

说明:查看当前系统中运行的所有Bash Shell及其子进程的关系。

2. 子Shell的概念与应用

2.1 子Shell的概念

  • 定义:子Shell是通过在Bash中使用小括号 () 包围命令时创建的,运行在独立环境中,其执行结果不影响父Shell的环境变量或状态。

  • 示例

    (pwd; echo $BASH_SUBSHELL) 
    
    • 解释:该命令会在子Shell中执行,输出当前目录路径和子Shell的层级。

2.2 多进程并行处理任务

  • 并行处理:通过创建多个子Shell,可以同时执行多个任务,实现并行处理。

  • 示例

    (ls; echo $BASH_SUBSHELL) &
    (ls; (echo $BASH_SUBSHELL)) &
    (ls; (pwd; (echo $BASH_SUBSHELL))) & 
    
    • 说明:通过嵌套子Shell实现并行处理,每个括号中的命令将在独立子Shell中执行,& 表示命令在后台执行,从而实现并行。

3. source命令与子Shell的区别

3.1 source命令

  • 功能:在当前Shell环境中执行脚本,不启动新的子Shell,变量和环境变化直接影响当前Shell。

  • 示例

    echo '#!/bin/bash
    a=1' > 1.sh
    source 1.sh
    echo $a  # 输出 1,因为变量 `a` 保存在当前Shell中 
    
    • 解释source 在当前Shell中执行脚本,变量 a 被定义在当前Shell中。

3.2 子Shell的区别

  • 功能:通过小括号 () 或执行脚本文件,启动新的子Shell,子Shell中的环境变化不影响父Shell。

4. 重定向操作

4.1 标准输入/输出/错误流与设备

  • 文件描述符:在Linux系统中,所有输入输出通过文件描述符(FD)管理。
  • 主要文件描述符
    • 标准输入(STDIN):文件描述符编号0,默认设备为键盘,路径为 /dev/stdin
    • 标准输出(STDOUT):文件描述符编号1,默认设备为显示器,路径为 /dev/stdout
    • 标准错误输出(STDERR):文件描述符编号2,默认设备为显示器,路径为 /dev/stderr

4.2 常见重定向操作

  • 重定向符号

    类型操作符用途
    重定向输入<从指定文件读取输入数据,替代标准输入设备
    重定向输出>将标准输出结果保存到指定文件,覆盖原有内容
    追加输出>>将标准输出结果追加到指定文件的末尾,不覆盖原有内容
    错误输出重定向2>将错误信息保存到指定文件,覆盖原有内容
    追加错误输出2>>将错误信息追加到指定文件的末尾,不覆盖原有内容
    混合输出&>将标准输出和标准错误输出保存到同一文件中
    错误到输出重定向2>&1将标准错误输出重定向到标准输出

4.3 重定向示例

示例

# 将标准输出和错误输出保存到同一文件
command &> output.txt

# 将错误输出追加到标准输出文件
command 2>> output.txt 
  • 解释:示例1将标准输出和错误输出重定向到一个文件中;示例2将错误输出追加到已有输出文件中(不是覆盖)。

5. 管道操作

5.1 管道操作符 |

  • 功能:将一个命令的输出作为下一个命令的输入,将多个命令串联起来。

  • 示例

    ps aux | wc -l 
    
    • 说明:列出所有运行的进程,并统计进程总数。

5.2 与 xargs 的结合

  • 使用场景:对于复杂输出形式的命令(如 lscprm),需通过 xargs 处理管道输入。

  • 示例

    cat /opt/1.txt | xargs rm -rf 
    
    • 解释:将 1.txt 文件中的内容作为参数传递给 rm -rf 命令删除文件或目录。

  • 14
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值