read
参数:
-p : 设置提示语句
使用read –p “string” 时可以不跟变量,那么输入内容保存到环境变量REPLY中(echo $REPLY)
-n : 指定输入字符最大个数。但输入字符数达到规定,自动停止输入,继续程序
#!/bin/bash
read -n1 -p "What's your choice[Y/N]?" choice
printf "\n"
case $choice in
Y|y)
echo "yes"
;; #不要忘写
N|n)
echo "no"
;;
*)
echo "bye"
;;
esac
exit 0
-t : 设置read命令等待输入时间,当时间到时,read返回非零值
#!/bin/bash
if read -t 5 -p "please input:" name
then
echo "welcome $name"
else
echo #换行,不然sorry会出现在input:后
echo "sorry"
fi
exit 0
-s : 使输入的数据不显示在屏幕上
#!/bin/bash
read -s-p "Please input your password:" password
printf "\n"
echo "Your password is :$password"
exit 0
另一种不显示密码的方法:
#!/bin/bash
echo -n "Please input yourpasswrod:"
stty -echo
read password
stty echo
printf "\n"
echo "password read."
读文件 : 每次调用read命令都会读取文件中的"一行"文本。当文件没有可读的行时,read命令将以非零状态退出。读取文件的关键是如何将文本中的数据传送给read命令。最常用的方法是对文件使用cat命令并通过管道将结果直接传送给包含read命令的while命令
#!/bin/bash
count=1
cat test1.sh | while read line
do
echo"$count:$line"
count=$((++count)) #equal: count=$(expr$count + 1)
done
exit 0
其实还可以这样读入一个文件
while read line
do
done < httpd.log
还可以
exec < file
while read line
do
done
现在实现文件复制:读取一个文件,将内容写入另一文件
#!/bin/bash
count=1
DES_FILE="/home/cat/practice/ffff.txt"
[ ! -f "$DES_FILE" ] &&touch $DES_FILE
cat test1.sh | while read line
do
echo "$line" >> $DES_FILE
count=$(expr $count + 1)
done
exit 0
-d : 使用定界符结束输入
#!/bin/bash
echo "input \"EOF\" tofinish input!"
read -d "EOF" var
echo -e "\nyour input is :"
echo $var
发现在输入E时程序就结束输入了
-a : 读入数组
-e : 在命令行中使用编辑器
-r : 允许输入包括反斜杠
-a array 将词语赋值给 ARRAY 数组变量的序列下标成员,从
零开始。
-d delim 持续读取直到读入 DELIM 变量中的第一个字符,而不是
换行符
-e 在一个交互式 shell 中使用 readline 获取行
-i text 使用 TEXT 文本作为 readline 的初始文字
-n nchars 读取 nchars 个字符之后返回,而不是等到读取
换行符,但是分隔符仍然有效,如果遇到分隔符之前读
取了不足 nchars 个字符
-N nchars 在准确读取了 nchars 个字符之后返回,除非遇到
了文件结束符或者读超时,任何的分隔符都被忽略
-p prompt 在尝试读取之前输出 PROMPT 提示符并且不带
换行符
-r 不允许反斜杠转义任何字符
-s 不显示终端的任何输入
-t timeout 如果在 TIMEOUT 秒内没有读取一个完整的行则
超时并且返回失败。TMOUT 变量的值是默认的超时时间。
TIMEOUT 可以是小数。如果 TIMEOUT 是0,那么仅当在
指定的文件描述符上输入有效的时候,read 才返回成功。
如果超过了超时时间,则返回状态码大于128
-u fd 从文件描述符 FD 中读取,而不是标准输入