标签:行数据 环境 定义变量 read 自动补全 赋值 字符 转义 读取
通过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
标签:行数据 环境 定义变量 read 自动补全 赋值 字符 转义 读取
原文地址:https://www.cnblogs.com/wanwz/p/13025646.html