2. read 命令

read 命令用于从标准输入文件描述符中读取一行数据,并将其分割后赋值给指定的变量。

命令格式

read [选项] [变量名1] [变量名2] ...

常用选项

选项
说明。
-a
将读取的单词依次赋值给数组 array 的成员。
-d
用指定的 delimiter 作为输入行的结束标志,而不是换行符。
-e
使用 readline 库来获取输入(提供行编辑功能)。
-i
在使用 readline 时,将 text 作为初始输入文本。
-n
读取 nchars 个字符后返回,而不是等待整行输入。
-N
准确读取 nchars 个字符(忽略分隔符)。
-p
显示提示信息 prompt,不换行。
-r
原始读取,不解释反斜杠转义字符。
-s
静默模式,不显示输入的内容(如密码输入)。
-t
设置超时秒数,超时后返回非零状态码。
-u
从文件描述符 fd 中读取,而不是标准输入。

示例:

weimingze@mzstudio:~$ read name
weimingze
weimingze@mzstudio:~$ echo "${name}"
weimingze
weimingze@mzstudio:~$ read name age
laowei      35
weimingze@mzstudio:~$ echo "${name} 的年龄是 ${age}"
laowei 的年龄是 35
weimingze@mzstudio:~$ read -p "请输入您的名字: " name
请输入您的名字: weimingze
weimingze@mzstudio:~$ echo $name
weimingze
weimingze@mzstudio:~$ read -t 3 -p "请3秒内输入您的名字: " name
请3秒内输入您的名字: weimingze@mzstudio:~$ echo $name

weimingze@mzstudio:~$

练习:

  1. 写一个创建工程文件和文件夹的 Shell 程序 mk_project.sh。要求根据用户数据的主文件名称来创建文件夹和文件,如输入 myproject创建如下结构的文件夹。
myproject/
├── include   └── robot.h
└── src
    ├── main.c
    └── robot.c

当输入 MYPRO2 时则创建如下结构的文件夹。

MYPRO2/
├── include   └── robot.h
└── src
    ├── main.c
    └── robot.c