1.1 Bash Shell 脚本基础:变量与参数

1.1 Bash Shell 脚本基础:变量与参数

Shell 脚本简介

Shell 是 Linux 系统的命令解释器,负责接收用户命令并调用对应程序执行。

Shell Script 本质上是将多条命令写入文件,由 Shell 按顺序执行,实现自动化运维和批量任务处理。

示例:

1
2
3
pwd
date
whoami

常见应用场景:

  • 自动化运维
  • 系统巡检
  • 批量部署
  • 日志处理
  • 定时任务

创建与执行脚本

创建脚本文件:

1
vim hello.sh

脚本内容:

1
2
3
#!/usr/bin/env bash

echo "Hello Shell"

执行方式:

1
bash hello.sh

或赋予执行权限:

1
2
chmod +x hello.sh
./hello.sh

查看权限:

1
ls -l hello.sh

变量使用

定义变量

1
name="shao"

注意:

1
name = shao

以上写法错误,等号两侧不能有空格。

引用变量

1
echo "$name"

推荐写法:

1
echo "${name}"

复杂场景示例:

1
echo "${name}_admin"

只读变量

1
readonly VERSION="1.0"

只读变量无法被重新赋值。

字符串与引号

双引号支持变量解析:

1
2
name="shao"
echo "$name"

单引号不解析变量:

1
echo '$name'

对比:

类型 变量解析
“ “ 支持
‘ ‘ 不支持

实际开发中优先使用双引号。

命令替换

用于获取命令执行结果。

推荐写法:

1
current_time=$(date)

示例:

1
2
3
hostname=$(hostname)
current_dir=$(pwd)
current_user=$(whoami)

输出结果:

1
echo "${hostname}"

用户输入

获取用户输入:

1
read name

带提示信息:

1
read -p "请输入用户名: " name

隐藏输入内容:

1
2
read -s -p "请输入密码: " password
echo

常用于账号登录和交互式脚本。

环境变量

查看所有环境变量:

1
env

或:

1
printenv

常见环境变量:

变量 说明
HOME 用户家目录
USER 当前用户
PATH 命令搜索路径
PWD 当前目录
SHELL 当前解释器

查看变量:

1
2
echo "$HOME"
echo "$PATH"

定义环境变量:

1
export APP_ENV=prod

永久生效可写入:

1
2
~/.bashrc
~/.bash_profile

脚本参数

执行脚本时可传递参数:

1
bash test.sh nginx start

脚本内容:

1
2
echo "$1"
echo "$2"

输出:

1
2
nginx
start

常用参数变量:

变量 说明
$0 脚本名称
$1-$9 位置参数
$# 参数总数
$@ 所有参数
$? 上条命令返回值
$$ 当前脚本PID

示例:

1
2
echo "参数个数: $#"
echo "所有参数: $@"

判断命令执行结果:

1
2
3
mkdir /tmp/test

echo $?

返回值:

  • 0:执行成功
  • 非0:执行失败

编写规范

推荐遵循以下规范:

  • 使用 #!/usr/bin/env bash
  • 变量名称具有明确含义
  • 变量引用使用 ${} 包裹
  • 字符串优先使用双引号
  • 关键命令检查返回值
  • 添加必要注释
  • 保持脚本结构清晰

规范示例:

1
2
3
4
5
#!/usr/bin/env bash

backup_dir="/data/backup"

echo "Backup Path: ${backup_dir}"

总结

Bash 变量与参数是 Shell 编程的核心基础,重点掌握以下内容:

  • Shell 脚本创建与执行
  • Shebang 解释器声明
  • 变量定义与引用
  • 引号使用区别
  • 命令替换
  • 用户输入处理
  • 环境变量管理
  • 脚本参数获取

掌握这些内容后,即可进一步学习条件判断、循环结构、函数封装以及自动化运维脚本开发。


1.1 Bash Shell 脚本基础:变量与参数
https://blog.sh462li.top/2026/06/01/Shell_learn/1.1 变量与参数/
作者
SHAO
发布于
2026年6月1日
许可协议