欢迎光临
我们一直在努力

Shell编程规范与变量

一、Shell 编程规范

规范的 Shell 脚本不仅能提升可读性,还能避免很多隐性错误,以下是行业通用的核心规范:

1. 脚本头部(Shebang)
  • 必须以 #!/bin/bash(或 #!/bin/sh)开头,指定脚本解释器,系统会根据这行找到对应的 Shell 解释器执行脚本。
  • 示例:

    bash

    运行

    #!/bin/bash
    # 注释:这是一个规范的Shell脚本开头

2. 脚本注释规范
  • 单行注释用 # 开头,关键逻辑、复杂计算、参数说明必须加注释。
  • 脚本开头建议添加 “脚本说明块”,包含:脚本功能、作者、创建时间、版本、参数说明等。示例:

    bash

    运行

    #!/bin/bash
    # 脚本名称:demo.sh
    # 功能:演示Shell规范和变量使用
    # 作者:xxx
    # 创建时间:2026-02-24
    # 版本:v1.0
    # 使用说明:直接执行,无需参数

3. 命名规范
  • 脚本名:小写字母 + 下划线,避免大写和特殊字符,如 system_check.sh(而非 SystemCheck.sh)。
  • 变量名:大写字母 + 下划线,见名知意,如 MAX_MEMORY、LOG_FILE_PATH。
  • 函数名:小写字母 + 下划线,动词 + 名词,如 check_disk_usage。
4. 格式规范
  • 缩进:统一用 4 个空格(避免 Tab,不同编辑器 Tab 宽度可能不一致)。
  • 行尾:避免多余空格,每行代码长度控制在 80 字符内(过长可换行,用 \\ 连接)。
  • 空格:运算符(=、==、+ 等)两侧加空格,如 a = 10(而非 a=10,提升可读性)。
5. 执行权限与编码
  • 脚本必须赋予执行权限:chmod +x 脚本名.sh。
  • 编码统一用 UTF-8,避免中文乱码(可通过 set fileencoding 检查)。

二、Shell 变量

变量是 Shell 脚本存储数据的核心,分为系统变量、用户自定义变量、特殊变量三类,以下是核心用法:

1. 变量的基本操作(自定义变量)
(1)定义变量
  • 语法:变量名=值(等号两侧无空格,这是新手最易出错的点)。
  • 规则:变量名只能包含字母、数字、下划线,且不能以数字开头。
  • 示例:

    bash

    运行

    # 正确定义
    NAME="张三"
    AGE=25
    PI=3.14

    # 错误定义(等号两侧有空格)
    # AGE = 25 # 执行会报错

(2)使用变量
  • 语法:$变量名 或 ${变量名}(推荐用 ${},避免变量名与后续字符混淆)。
  • 示例:

    bash

    运行

    #!/bin/bash
    NAME="张三"
    echo "姓名:$NAME" # 输出:姓名:张三
    echo "姓名:${NAME}" # 输出:姓名:张三(推荐)
    echo "${NAME}的年龄是25" # 输出:张三的年龄是25(无${}会识别错误)

(3)修改变量
  • 直接重新赋值即可,无需额外声明。
  • 示例:

    bash

    运行

    AGE=25
    echo "修改前:$AGE" # 输出:修改前:25
    AGE=26
    echo "修改后:$AGE" # 输出:修改后:26

(4)删除变量
  • 语法:unset 变量名,删除后变量不可用。
  • 示例:

    bash

    运行

    AGE=25
    unset AGE
    echo $AGE # 输出空行(变量已被删除)

2. 系统变量

系统预定义的变量,可直接使用,常用的有:

表格

变量名含义
$0 当前脚本的文件名
$1-$9 脚本的第 1-9 个参数(执行脚本时传入,如 ./demo.sh 10 20,则 $1=10,$2=20)
$# 脚本传入的参数个数
$* 所有参数(作为一个整体)
$@ 所有参数(作为独立个体)
$? 上一条命令的执行状态(0 表示成功,非 0 表示失败)
$$ 当前脚本的进程 ID(PID)

示例(演示系统变量):

bash

运行

#!/bin/bash
# 脚本名:sys_var.sh
echo "脚本名:$0" # 输出:脚本名:./sys_var.sh
echo "第1个参数:$1" # 执行./sys_var.sh 10 20 时,输出:第1个参数:10
echo "参数个数:$#" # 执行./sys_var.sh 10 20 时,输出:参数个数:2
echo "上一条命令状态:$?" # 输出:0(上一条echo命令执行成功)

执行测试:

bash

运行

chmod +x sys_var.sh
./sys_var.sh 10 20
# 输出:
# 脚本名:./sys_var.sh
# 第1个参数:10
# 参数个数:2
# 上一条命令状态:0

3. 特殊变量(环境变量 / 只读变量)
(1)环境变量

作用于整个系统,可通过 export 声明,让子进程继承变量。示例:

bash

运行

# 临时设置环境变量(仅当前会话有效)
export PATH=$PATH:/usr/local/bin # 追加自定义路径到系统PATH
export LANG=zh_CN.UTF-8 # 设置字符编码

# 永久生效:将上述命令写入 ~/.bashrc 或 /etc/profile,执行 source ~/.bashrc 生效

(2)只读变量

用 readonly 声明,声明后无法修改 / 删除。示例:

bash

运行

readonly VERSION="1.0"
VERSION="2.0" # 执行报错:-bash: VERSION: 只读变量
unset VERSION # 执行报错:-bash: unset: VERSION: 无法取消设定: 只读变量

三、变量的进阶用法

1. 变量替换(常用场景)

表格

语法含义
${变量:-默认值} 变量为空 / 未定义时,使用默认值(变量本身不变)
${变量:=默认值} 变量为空 / 未定义时,使用默认值并赋值给变量
${变量:?提示信息} 变量为空 / 未定义时,输出提示信息并终止脚本

示例:

bash

运行

#!/bin/bash
# 变量为空时用默认值
echo "${NAME:-未知}" # NAME未定义,输出:未知

# 变量为空时赋值并使用
echo "${AGE:=18}" # AGE未定义,输出18,且AGE=18
echo $AGE # 输出:18

# 变量为空时终止脚本
# echo "${SEX:?SEX变量未定义}" # 执行报错:./demo.sh: 行10: SEX: SEX变量未定义

2. 变量运算

Shell 默认是字符串处理,数值运算需用 $((运算式)) 或 expr:

bash

运行

a=10
b=5
# 加法
echo $((a + b)) # 输出:15
# 减法
echo $((a – b)) # 输出:5
# 乘法(注意*需要转义,或用(( )))
echo $((a * b)) # 输出:50
echo `expr $a \\* $b` # 输出:50

赞(0)
未经允许不得转载:171主机测评 » Shell编程规范与变量
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址