前言
read 接收输入的数据 写脚本经常用的命令
之前都是瞎鸡儿用 从来没考虑仔细看看 文档 这次有时间 看看 记录下这篇笔记
实例
读取键盘输入
1 | echo ' |
1:带提示的read
1 | echo ' |
2:多个参数的read
经过空格分割参数数量等于指定的变量数量
1 | echo ' |
经过空格分割的参数小于指定的变量数量
当经过空格分割的参数小于指定的变量数量的时候 多余的变量为空
提示输入的时候 输入 ‘ming’
1 | echo ' |
经过空格分割的参数大于指定变量的数量
当经过空格分割的参数大于指定变量的数量 超出部分的数据会赋值给最后一个变量
提示输入的时候 输入 ‘ming jiu xu’
1 | echo ' |
3:使用内置的环境变量调用输入的数据
使用REPLY环境变量获取此次输入的数据
1 | echo ' |
4:限制时间的read
使用 read 的-t参数来设定read等待时间
执行不进行操作等待5s后超时
1 | echo ' |
5:输入敏感字符不显示在终端
使用-s参数 不在终端显示输入的数据
1 | echo ' |
读取文件
准备文件
1 | echo 'nihao1 |
- 使用-u选项读取文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14echo '
#!/bin/bash
exec 3< test.txt
count = 0
while read -u 3 var
do
let count=$count+1
echo "test.txt第$count行:$var"
done
echo "结束"
exec 3<&-
' > readFile.sh
chmod +x ./readFile.sh
./readFile.sh - 使用管道read 文件
需要注意 管道是新开启一个进程执行 那么 只有在管道的进程中 count =行数1
2
3
4
5
6
7
8
9
10
11
12
13echo '
#!/bin/bash
count=0
cat test.txt | while read var
do
let count=$count+1
echo "第$count行:$var"
done
echo "结束"
exit 0
' > readFile.sh
chmod +x ./readFile.sh
./readFile.sh - 使用重定向
1
2
3
4
5
6
7
8
9
10
11
12
13echo '
#!/bin/bash
count=0
while read var
do
let count=$count+1
echo "第$count行:$var"
done < test.txt
echo "结束"
exit 0
' > readFile.sh
chmod +x ./readFile.sh
./readFile.sh
注意
\在linux常规操作中没有做任何特殊处理的话 它是表示续行符 read也是一样的 默认处理\续行符 如果需要read 把所有的特殊符号都不进行处理 加上 -r选项
总结
通过read 读取键盘输入或者文件 中的信息 是经常的操作
读取键盘的输入主要就考虑 是不是要有提示(-p) 是不是要设置超时时间(-t) 终端打不打印明文(-s)
读取文本的时候 主要考虑 是直接使用read读取 还是使用重定向还是管道去处理 当使用管道读取的时候 一定要注意 管道是新建一个进程去执行 变量不共享
不官是键盘还是读文本 如果不需要处理特殊字符 加上-r参数