shell脚本-- while循环中的重定向

一 read命令

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name …]

参数说明:

-a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
-d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
-p 后面跟提示信息,即在输入前打印提示信息。
-e 在输入的时候可以使用命令补全功能。
-n 后跟一个数字,定义输入文本的长度,很实用。

-r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
-s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
-t 后面跟秒数,定义输入字符的等待时间。

-u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。

​    read是一个用来赋值的命令,它需要从标准输入获得值,然后把这些值按位置依次赋值给变量arg1、arg2、arg3、arg4…,输入的时候默认以空格作为字段分隔符,如果输入回车时,就会停止输入。当我们输入的字段比变量数目多时,最后一个变量的值将不只一个字段,而是所有剩余的内容;当输入字段比变量数少时,多余的变量将是空值。


举例

提示用户输入用户名,计时5秒。如果超时,read命令将返回一个非零退出状态。

#!/bin/bash

if read -t 5 -p "请输入用户名:" username
then
    echo "你输入的用户名是 $username"
else
    echo "\n抱歉,你输入超时了。"
fi
exit 0

执行程序不输入,等待 5 秒后:

输入用户名:
抱歉,你输入超时了

二 重定向while循环中的输入、输出

将文件中的内容重定向到while循环的输入

#!/bin/bash

# 打印file.txt中的内容
while read line
do
    echo $line
done < file.txt

​ 每次调用 read 命令都会读取文件中的 “一行” 文本。当文件没有可读的行时,read 命令将以非零状态退出。

将command命令的输出作为while循环的输入

# 打印 /usr 的子目录
#!/bin/bash

ls -l /usr/ | awk '/^d/ {print $NF}' | while read line
do
    echo $line
done 


# 方法二
#!/bin/bash

dir=$(ls -l /usr/ |awk '/^d/ {print $NF}')
for i in $dir
do
 	echo $i
done 


# 方法三
for dir in $(ls /usr/)
do
 	[ -d $dir ] && echo $dir
done


将while循环的输出内容重定向到文件

# 将 /usr 的子目录打印到 file.txt 文件中
#!/bin/bash

ls -l /usr/ | awk '/^d/ {print $NF}' | while read line
do
    echo $line
done >> file.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值