Shell 编程规范与变量

目录

一、Shell 脚本概述

1.Shell 的含义

2.Shell 的作用

二、Shell 脚本的基本操作编写

1.编写一个脚本

(1)新建脚本

(2)执行脚本命令

2.重定向与管道符操作

(1)重定向操作

(2)管道符操作

三、Shell 变量的作用、类型

1.自定义变量

(1)定义新的变量

(2)查看和引用变量的值

(3)变量赋值的特殊操作

(4)设置变量的作用范围

(5)数值变量的运算

2.特殊的 Shell 变量

(1)环境变量

(2)只读变量

(3)位置变量

(4)预定义变量

四、总结


一、Shell 脚本概述

1.Shell 的含义

  • 定义
    Shell 是用户与操作系统内核(Kernel)之间的“翻译官”,负责将用户输入的命令解析为内核能理解的指令,并将执行结果返回给用户。

  • 本质

    • 命令行解释器(CLI),支持交互式操作(逐行输入命令)和脚本化执行(批量处理命令)。

    • 用户空间程序(非内核组件),通过系统调用与内核交互。

  • 流程:用户命令 → Shell(解释器) → 内核(执行) → 结果 → Shell → 用户  

2.Shell 的作用

常见类型

  • Bash:Linux 默认 Shell(Bourne-Again Shell),功能丰富。

  • Zsh:支持更强大的自动补全和主题定制(如 Oh My Zsh)。

  • Fish:语法友好,适合新手

Shell 是操控系统的“遥控器”+“自动化流水线”,让用户通过命令和脚本高效管理系统、处理数据、解放双手。

二、Shell 脚本的基本操作编写

1.编写一个脚本

(1)新建脚本
  1.  vim first.sh  //创建名为first的脚本文件
  2. 添加 Shebang 声明(指定解释器):#!/bin/bash # 必须放在脚本第一行
  3. 编写命令
  4. 保存并退出(如用 Vim:按 Esc → :wq)。
(2)执行脚本命令

直接用当前shell执行

  • source aa.sh
  • . aa.sh

打开一个shell,执行脚本指令,然后退出该子Shell

  • ./aa.sh      (需赋予执行权限chmod +x )
    # 通过路径执行(需 Shebang 声明)
  • bash aa.sh
  • sh aa.sh

2.重定向与管道符操作

(1)重定向操作 

注意:

0 标准输入,1 标准输出,2 标准错误(不可省略)。

重定向会破坏文件原有内容(> 尤其危险,慎用!)。

  • 输出重定向

    • >:覆盖写入文件

      echo "Hello" > output.txt  # 创建或清空文件后写入  
    • >>:追加写入文件

      echo "World" >> output.txt  # 追加内容到文件末尾  
  • 输入重定向

    wc -l < input.txt  # 从文件读取输入(统计行数)  
  • 错误重定向

    ls nofile 2> error.log  # 将错误信息写入 error.log  
    ls nofile &> all.log    # 同时重定向标准输出和错误  
    

大致总结

命令 > 文件   → 输出覆盖到文件  
命令 >> 文件  → 输出追加到文件  
命令1 | 命令2 → 命令1的输出作为命令2的输入  
(2)管道符操作
  • 管道符 |:将前一个命令的标准输出传递给后一个命令的标准输入

    cat log.txt | grep "error" | wc -l  
    # 分解:  
    # 1. 读取 log.txt  
    # 2. 过滤包含 "error" 的行  
    # 3. 统计行数  
  • 用法:

结合 grepawksed 处理文本。

  • awk  -F(间隔符)'{print (位置变量)}'  :过滤列
  • grep  :过滤行

  • sed : 

批量处理文件名(如 df -hT | grep"/$" | awk '{print $6}' )。

三、Shell 变量的作用、类型

1.自定义变量

(1)定义新的变量
  • 基本语法

    变量名="变量值"  # 等号两侧不能有空格!  
  • 变量命名规则

    • 字母/数字/下划线组成,不能以数字开头。

    • 区分大小写

(2)查看和引用变量的值
  • 查看变量

    echo $user      # 输出变量值,"$" 是引用变量的值,加在变量名前
    echo ${user} 2.5   #“ {} ” 变量名的边界 ,可以避免与紧随其后的其他字符混淆
  • 删除变量

    unset 变量名      #慎用
(3)变量赋值的特殊操作
  • 基本方法:在等号“=”后面直接指定变量内容

  • 特殊的赋值

  • 双引号(" "):起界定字符串,可以引用解析另一个变量(以变量的值进行赋值);赋值内容有空格时,必须括起来。
  • 单引号(' '):可以输出赋值内容包含的特殊符号,引号内容原样输出。
  • 反撇号( ` ` ):用于命令替换,引用的是命令,将此命令的结果赋值给变量。
  • $( ) :可实现嵌套命令替换操作。例如:rpm -qc $(rpm -qf $(which useradd))
  • read 命令:类似交互模式,然后把交互输入的值给变量赋值;“ -p ”选项可设置提示信息,进行交互。
(4)设置变量的作用范围
  • 局部变量(默认):仅在当前 Shell 进程有效。

  • 全局变量(环境变量):   export (导出)变量名  #把现有变量导出为全局变量  (临时)
                                            export 变量名=“变量值” #直接创建全局变量(临时)
                                           /etc/profile   :写入全局变量配置文件 (永久生效)

             文件内容示例export PATH="/usr/bin:$PATH"  # 设为全局变量(子进程可继承)  
(5)数值变量的运算
  • 基本格式:expr  变量 1 运算符(+ -  \*  /  %  : 加、减、乘、除、求模)变量2 [运算符  变.....]

  • 可实现算术运算语法

    # 方式一:双括号  
    sum=$((10 + 5 * 2))  # 结果为 20  
    # 方式二:expr(注意空格!)  
    sum=`expr 10 + 5`    # 结果为 15(仅整数)  
    # 方式三:let  
    let "sum=10+5"       # 结果为 15  

2.特殊的 Shell 变量

(1)环境变量
  • 定义:全局生效的变量,影响 Shell 行为。

  • 常用变量

    • PATH:命令搜索路径

    • HOME:用户主目录

    • USER:当前用户名

  • 查看所有环境变量

    env  :    查看当前工作环境下的环境变量

  • 设置脚本或程序等为默认搜索路径(可直接以文件名运行脚本)
    1. 脚本拷贝到系统文件
    2. 做软链接(推荐)
    3. 写全局变量  PATH="路径:$PATH"   将路径添加到默认搜索环境变量中

(2)只读变量
  • 定义后不可修改、不可删除: 

readonly pi=3.14     #创建只读变量

pi=3.1415          # 报错:readonly variable,不可重新赋值

unset 变量名    #报错:readonly variable ,不可删除

  • 查看只读变量

readonly # 列出所有只读变量

(3)位置变量
  • 脚本参数传递

    • $0:脚本名称

    • $1 ~ $9:第 1~9 个参数

    • $10 需写成 ${10}

  • 获取所有参数

    • $@:所有参数列表(每个参数独立)

    • 示例

      # 执行脚本:./script.sh a b c  
      echo "第一个参数:$1"   # 输出 a  
      echo "所有参数:$@"     # 输出 a b c  
(4)预定义变量

系统自动维护的变量

  • $?: 前一条命令的执行结果,0为正确。其他为错

  • $# : 位置参数的个数

  • $*:位置参数的内容

  • $$:当前 Shell 进程的 PID

  • $!:最后一个后台进程的 PID

  • 示例

    ls /non-exist  
    echo "上条命令是否成功:$?"  # 输出非 0  
    echo "当前进程 PID:$$"  

四、总结

核心执行方式 ★★
• bash script.sh → 显式调用bash解释器
• ./script.sh → 需先赋予执行权限

 重定向操作 ★★★
[输入输出流控制]
• >:覆盖输出重定向(例:ls > file.txt 清空原内容写入)
• >>:追加输出重定向(日志文件常用)
• <:输入重定向(例:sort < data.txt)

管道符操作 ★★

• 前命令的输出作为后命令的输入
• 例:ps aux | grep nginx → 进程筛选黄金组合

变量总结速查表

变量类型示例用途
自定义变量name="Bob"存储临时数据
环境变量export PATH全局配置
位置变量$1$@脚本参数处理
预定义变量$?$$获取系统状态信息

核心原则

  • 变量引用时加 $,赋值时不用。

  • 作用域控制避免污染全局环境。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值