插件窝 干货文章 Linux read命令的完全介绍和使用方法

Linux read命令的完全介绍和使用方法

echo bash 输入 read 495    来源:    2025-04-10

Linux read 命令完全指南

read 是 Linux/Unix shell 脚本中一个非常实用的内置命令,用于从标准输入或文件描述符中读取数据并将其赋值给变量。

基本语法

read [options] [name...]

常用选项

选项 描述
-a array 将读取的值分配给数组,从索引 0 开始
-d delimiter 指定读取结束的分隔符,而不是换行符
-e 使用 Readline 获取输入(提供行编辑功能)
-i text 在交互式 shell 中使用文本作为初始输入
-n nchars 读取指定数量的字符后返回
-N nchars 精确读取指定数量的字符(忽略分隔符)
-p prompt 在读取前打印提示信息
-r 禁止反斜杠转义解释
-s 静默模式,不显示输入(用于密码输入)
-t timeout 指定超时秒数
-u fd 从文件描述符 fd 读取

基本用法

1. 简单读取

#!/bin/bash
echo "请输入您的名字:"
read name
echo "你好, $name!"

2. 读取多个变量

#!/bin/bash
echo "请输入您的姓和名:"
read first last
echo "您的全名是: $last $first"

3. 使用提示符 (-p)

#!/bin/bash
read -p "请输入您的年龄: " age
echo "您今年 $age 岁"

4. 静默输入 (-s)

#!/bin/bash
read -s -p "请输入密码: " password
echo
echo "密码已接收"

5. 超时设置 (-t)

#!/bin/bash
if read -t 5 -p "请在5秒内输入您的名字: " name; then
    echo "你好, $name!"
else
    echo "输入超时"
fi

6. 限制输入字符数 (-n)

#!/bin/bash
read -n 1 -p "请按任意键继续..." key
echo
echo "您按下了 $key 键"

7. 读取数组 (-a)

#!/bin/bash
echo "请输入三个数字,用空格分隔:"
read -a nums
echo "第一个数字: ${nums[0]}"
echo "第二个数字: ${nums[1]}"
echo "第三个数字: ${nums[2]}"

8. 自定义分隔符 (-d)

#!/bin/bash
read -d : -p "请输入以冒号结尾的信息:" info
echo "您输入的信息是: $info"

9. 从文件读取

#!/bin/bash
while read line; do
    echo "行内容: $line"
done < filename.txt

10. 读取文件描述符 (-u)

#!/bin/bash
exec 3< input.txt
read -u 3 line
echo "第一行是: $line"
exec 3<&-

高级用法

1. IFS 分隔符控制

#!/bin/bash
IFS=":" read -p "输入用户名和密码 (格式: user:pass): " user pass
echo "用户: $user"
echo "密码: $pass"

2. 读取命令输出

#!/bin/bash
ls | while read file; do
    echo "找到文件: $file"
done

3. 处理带空格的文件名

#!/bin/bash
find . -type f -print0 | while IFS= read -r -d '' file; do
    echo "处理文件: $file"
done

注意事项

  1. 默认情况下,read 会解释反斜杠转义字符,使用 -r 选项可以禁用此功能
  2. 未指定变量名时,读取的内容会存储在 REPLY 变量中
  3. read 命令的退出状态:
    • 0:成功读取
    • 非0:遇到文件结束或读取超时
  4. 在循环中使用 read 时,注意管道会创建子shell,可能导致变量在父shell中不可用

实际应用示例

1. 菜单选择

#!/bin/bash
while true; do
    echo "1. 选项一"
    echo "2. 选项二"
    echo "3. 退出"
    read -p "请选择: " choice

    case $choice in
        1) echo "您选择了选项一";;
        2) echo "您选择了选项二";;
        3) break;;
        *) echo "无效选项";;
    esac
done

2. 配置文件解析

#!/bin/bash
while IFS='=' read -r key value; do
    case $key in
        "username") username="$value";;
        "password") password="$value";;
    esac
done < config.ini

echo "用户名: $username"
echo "密码: $password"

3. 密码验证

#!/bin/bash
read -s -p "请输入密码: " pass1
echo
read -s -p "请再次输入密码: " pass2
echo

if [ "$pass1" != "$pass2" ]; then
    echo "密码不匹配"
    exit 1
fi

echo "密码设置成功"

read 命令是 shell 脚本中交互式输入的核心工具,掌握它的各种用法可以大大提高脚本的灵活性和用户体验。