read 是 Shell 内置命令,用于从标准输入中读取数据并赋值给变量。如果没有进行重定向,默认就是从终端控制台读取用户输入的数据;如果进行了重定向,那么可以从文件中读取数据。
read [-options] [var1 var2 ...]
options支持的参数:
| 选项 | 说明 |
|---|---|
| -a array | 把读取的数据赋值给数组 array,从下标 0 开始。 |
| -d delimiter | 用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。 |
| -e | 在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。 |
| -n num | 读取 num 个字符,而不是整行字符。 |
| -p prompt | 显示提示信息,提示内容为 prompt。 |
| -r | 原样读取(Raw mode),不把反斜杠字符解释为转义字符。 |
| -s | 静默模式(Silent mode),不会在屏幕上显示输入的字符。 当输入密码和其它确认信息的时候,这是很有必要的。 |
| -t seconds | 设置超时时间,单位为秒。如果用户没有在指定时间内输入完成, 那么 read 将会返回一个非 0 的退出状态,表示读取失败。 |
| -u fd | 使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。 |
1 使用 read 命令给多个变量赋值
#!/bin/bash
read -p "请输入姓名、年龄、爱好:" name age hobby
echo "姓名: ${name}"
echo "年龄: ${age}"
echo "爱好: ${hobby}"

2 读取一个字符
#!/bin/bash
read -n 1 -p "您确定要删除用户的数据吗? (y/n):" char
echo
echo "您输入的字符为: ${char}"

3 校验密码
5秒校验密码是否一致
#!/bin/bash
read -t 5 -sp "输入密码(5秒内):" pwd1
echo
read -t 5 -sp "请确认密码(5秒内):" pwd2
echo
echo "pwd1:${pwd1}, pwd2:${pwd2}"
if
[ $pwd1 == $pwd2 ]
then
echo "密码一致"
else
echo "验证失败,密码不一致"
fi

exit 用于退出当前Shell环境进程结束运行, 并且可以返回一个状态码.一般使用 $? 可以获取退出状态码
# 默认返回状态码0, 一般代表命令执行成功
exit
# 数字建议的范围0~255, 一般代表命令执行失败
exit 非0数字
#!/bin/bash
echo "hello"
exit
echo "world"

declare命令用于声明 shell 变量,实现关联数组变量。
关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。
declare -A 关联数组变量名=([字符串key1]=值1 [字符串key2]=值2 …)
获取指定key的值:
${关联数组变量名[key]}
获取所有值:
${关联数组变量名[*]} # 方式1
${关联数组变量名[@]} # 方式2
#!/bin/bash
declare -A array=([name]="张三" [age]=14)
echo ${array[name]}
echo ${array[age]}
echo ${array[*]}
