Shell 变量、环境变量、脚本规范(运维必背)

一、Shell 变量(基础)

1. 定义变量

bash

name="zhangsan"
age=20

注意:

  • 等号两边不能有空格
  • 有空格 / 特殊字符必须加引号

2. 使用变量

bash

echo $name
echo "My age is $age"
echo "My age is ${age}岁" # 加{}更安全

3. 把命令结果赋给变量(常用)

bash

now=$(date +%F)
ip=$(hostname -I)

4. 只读变量

bash

readonly name="test"

5. 删除变量

bash

unset name

二、环境变量

1. 查看所有环境变量

bash

env

2. 常用环境变量

bash

echo $PATH       # 命令搜索路径
echo $HOME       # 家目录
echo $PWD        # 当前目录
echo $USER       # 当前用户
echo $SHELL      # 当前shell
echo $PS1        # 命令提示符

3. 临时设置环境变量

bash

export MY_ENV="test"

只在当前终端有效。

4. 永久生效(推荐)

bash

# 对所有用户
vim /etc/profile
export MY_ENV="test"

# 只对当前用户
vim ~/.bashrc
export MY_ENV="test"

生效:

bash

source /etc/profile
# 或
. /etc/profile

三、脚本里的特殊变量(超级常用)

bash

$0    # 脚本本身文件名
$1    # 第1个参数
$2    # 第2个参数
$#    # 参数个数
$*    # 所有参数
$@    # 所有参数
$$    # 当前脚本PID
$?    # 上一条命令返回值(0成功,非0失败)

示例:

bash

#!/bin/bash
echo "脚本名:$0"
echo "第1个参数:$1"
echo "参数总数:$#"
echo "PID:$$"

四、Shell 脚本规范(运维标准写法)

1. 标准开头(必须写)

bash

#!/bin/bash
# Description: 脚本功能
# Author: your name

2. 开启严格模式(推荐)

bash

set -euo pipefail
  • set -e:出错就停
  • set -u:未定义变量报错
  • set -o pipefail:管道某一步错就报错

3. 变量用 ${} 包起来

bash

# 好
echo "${name}"

# 不好
echo $name

4. 路径用绝对路径

bash

log_dir="/var/log"

5. 日志输出规范

bash

echo "[$(date '+%F %T')] 开始执行"
echo "[$(date '+%F %T')] 执行成功"

6. 判断命令是否成功

bash

if [ $? -eq 0 ]; then
    echo "成功"
else
    echo "失败"
    exit 1
fi

五、一个标准运维脚本模板(直接复制用)

bash

#!/bin/bash
set -euo pipefail

# 变量
LOG_FILE="/var/log/script_$(date +%F).log"

# 函数
info() {
    echo "[$(date '+%F %T')] INFO $*" | tee -a "${LOG_FILE}"
}

# 主逻辑
info "开始执行脚本"

# 你的命令
mkdir -p /tmp/test

info "执行完成"

六、直接背的重点

  • 变量:等号无空格,用 $${}
  • 环境变量:export,永久写 /etc/profile
  • 特殊变量:$1 $# $? $$ 必背
  • 脚本开头:#!/bin/bash + set -euo pipefail
  • 规范:绝对路径、日志、判断返回值
滚动至顶部