read用法
- 通过read命令获取用户输入,并存入一个变量
- 读取的值默认是以空格分隔,可以通过自定义环境变量IFS修改分隔标志
- IFS的默认值是空格、Tab符号、换行符号,通常选取空格
格式
通过read命令获取用户输入,并存入一个变量
read [options] [variable...]
options:
-t #:超时的秒数,超过指定时间,用户仍然没有输入,脚本放弃等待,继续向下执行
-p "text":指定用户输入的提示信息
-a:把用户输入赋值给一个数组,从0号开始
]# read -a name
]# zhao qian sun li
]# echo ${name[2]}
]# sun
-n [#]:指定只读取若干个字符作为变量值,而不是整行读取
]# read -n 3 text
]# asdfghjkl
]# echo $text
]# asd
-e:允许用户输入的时候,使用readline库提供的快捷键,例自动补全
-d delimiter:定义字符串delimiter的第一个字符作为用户输入的结束,而不是一个换行符
-r:raw模式,表示不把用户输入的反斜杠字符解释为转义字符
-s:设置用户的输入不在屏幕上显示,常常用于输入密码或保密信息
示例
-
除了读取键盘的输入,可以用来读取文件
while read line do echo "$line" done < $filename 例: #bin/bash input="/path/to/file" while read -r line do echo "$line" done < "$input"
-
变量与用户输入值的关系
-
一个变量对应一个值
read -t 3 -p "Please Enter your name:" NAME echo "Hi,$NAME"
-
一个变量对应一整行数据
-
多个变量对应多个值:一一对应赋值
read -n -p "Please Enter your firstname and lastname:" FN LN echo "Hi,$LN $FN"
-
多个变量对应大于变量数的值:多余的输入项包含到最后一个变量中
echo -n "Enter two values: " read a b c echo "$a $b $c"
-
多个变量对应小于变量数的值:额外的变量值为空
read -p "Enter three values:" a b echo "$a $b"
-
没有定义变量:环境变量"REPLY"包含所有的输入 = 一个变量对应一整行数据
read -n -p "Enter values: " echo "REPLY='$REPLY'"
-
-
IFS定义分隔符为":"
#!/usr/bin/env bash FILE=/etc/passwd read -p "Enter a username: " user_name INFO=$(grep "^${user_name}" $FILE) if [ -n $INFO ]; then IFS=":" read user pw uid gid name home shell <<< $INFO echo "User = $user" echo "UID = $uid" echo "GID = $gid" echo "Passwd = $pwd" else echo "No such user $user_name" &>/dev/null exit 1 fi