Shell 变量的读取与使用详解
在 Shell 脚本中,变量是存储和处理数据的基础。无论是系统环境变量还是用户自定义变量,掌握其读取和使用方式对编写高效脚本至关重要。本文将详细介绍 Shell 变量的读取方法、命令替换及交互式输入。
变量的基本赋值与读取
1. 变量赋值规则
- 变量名与值之间用
= 连接,等号两边不能有空格(这是最容易出错的点)。
- 变量名只能包含字母、数字和下划线,且不能以数字开头。
- 若变量值包含空格或特殊字符,需用双引号(
")包裹。
1 2 3 4 5 6
| name="Shell Script" age=30
|
2. 变量的读取方式
通过 $变量名 或 ${变量名} 读取变量值,两者的区别在于:
${变量名} 用于明确变量边界,避免与后续字符混淆。
1 2 3 4 5 6 7 8 9 10 11 12
| name="Tom"
echo $name
echo ${name}orrow echo $nameorrow
greeting="Hello, $name" echo $greeting
|
命令替换:将命令结果赋值给变量
通过 $(命令) 或 命令 可以将命令的输出结果赋值给变量,这一过程称为命令替换。
1. 语法格式
2. 示例
1 2 3 4 5 6 7 8 9 10 11
| today=$(date +%F) echo "今天是:$today"
file_lines=$(wc -l /etc/passwd | awk '{print $1}') echo "系统用户数:$file_lines"
disk_usage=$(df -h | grep $(hostname) | awk '{print $5}') echo "磁盘使用率:$disk_usage"
|
交互式输入:read 命令
read 命令用于从键盘读取用户输入并赋值给变量,适合需要人机交互的脚本(如获取用户密码、配置参数等)。
1. 常用选项
| 选项 |
功能 |
-p "提示信息" |
显示输入提示文字 |
-s |
隐藏输入内容(用于密码等敏感信息) |
-t 秒数 |
设置输入超时时间(超时后脚本继续执行) |
-n 字符数 |
限制输入的字符数量(达到数量后自动结束输入) |
-a 数组名 |
将输入的多个值存入数组 |
2. 示例
(1)基本用法
1 2 3 4 5 6 7
| #!/bin/bash
read -p "请输入您的姓名:" name read -p "请输入您的年龄:" age
echo "您好,$name!您的年龄是 $age 岁。"
|
执行结果:
1 2 3 4
| sh get_info.sh 请输入您的姓名:张三 请输入您的年龄:25 您好,张三!您的年龄是 25 岁。
|
(2)读取密码(隐藏输入)
1 2 3 4 5 6 7 8 9 10 11 12
| #!/bin/bash
read -p "请输入密码:" -s passwd echo read -p "请确认密码:" -s passwd2 echo
if [ "$passwd" = "$passwd2" ]; then echo "密码设置成功!" else echo "两次密码不一致!" fi
|
(3)超时输入与字符限制
1 2 3 4 5 6 7 8 9 10 11
| #!/bin/bash
echo "请在5秒内输入一个1-3位的数字:" read -t 5 -n 3 num echo
if [ -z "$num" ]; then echo "输入超时或未输入!" else echo "您输入的是:$num" fi
|
变量的作用范围
局部变量:默认情况下,变量仅在当前 Shell 进程中有效,脚本执行结束后失效。
环境变量:通过export命令可将变量提升为环境变量,供子进程使用:
1 2
| export PATH=$PATH:/new/dir export LANG=zh_CN.UTF-8
|