一、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 - 规范:绝对路径、日志、判断返回值