您的位置:首页 > 运维架构 > Shell

[bash]read命令

2014-09-27 10:43 141 查看
1. 基本的read和带提示的read命令:

#!/bin/bash

echo -n "Enter you name: "
read name
echo Hello $name!

#和上例的效果一样
#-p命令使得read具有提示信息的能力
#注意,为了给提示信息最后留一个空格的空间,提示信息要用""括起来
#否则会作为命令参数的分隔符看待
#如果不加空格后面的每个单词会被当做echo的参数看待,当然这些都是要打印的参数
read -p "Please enter your name: " name
echo Hello $name!

#read对""包含空格的参数不敏感,暴力地以空格作为参数的分隔符
#从头开始将输入按照空格隔开的原则一个一个分给变量
#当倒数第二个变量分配完毕之后,剩余的输入将作为一个参数统统分给最后一个变量
#包括字符串中的空格
read -p "Please enter your name: " first last
echo Your first name is $first and your last name is $last
#output test 3:
Please enter your name: "sdfx xx" kkk
Your first name is "sdfx and your last name is xx" kkk

一个简单的应用:

#!/bin/bash

read -p "Please enter your age: " age
days=$[ $age * 365 ]
echo That makes you over $days days old!


2. 如果输入时不指定接受输入数据的变量则数据会自动保存在环境变量$REPLY中:

#!/bin/bash

#一个简单的求阶乘的例子

read -p "Please enter a number: "
fac=1
for (( i = 2; i <= $REPLY; i++ ))
do
fac=$[ $i * fac ]
done
echo The factorial of $REPLY is $fac


3. 超时处理:

#!/bin/bash

#-t后面的选项参数表示输入等待的秒数
#如果超时则命令返回非0码
#因此经常和if或while等配合使用

if read -t 3 -p "Please enter you name: " name
then
echo Hello $name!
else
echo	#加一个换行,否则仍然会停留在输入的那一行上
echo Sorry, you are too slow!
fi


4. 对输入进行计数:

#!/bin/bash

#选项n表示对输入的字符个数计数,一旦到达指定选项参数的个数时不用回车立即就读入并处理输入的数据
read -n1 -p "Do you want to continue [Y/N]? " ans
echo	#由于不用回车所以这里需要换行一下
case $ans in
Y | y) echo "Fine, continue on...";;	#多种选项的合并用|运算符即可
N | n) echo "Good bye!"
exit 5;;	#直接退出脚本并返回一个推出状态码5
esac
echo This is the end of the script


5. -s选项用来隐藏输入信息:

#!/bin/bash

#-s选项用于隐藏输入,实际上是将输入信息的颜色设置成和底色一样
read -sp "Please enter you password: " pswd
echo
echo Is your password really $pswd?


6. 从文件中管接信息:

#!/bin/bash

cnt=1
cat test.txt | while read line	#是一行一行读取的,包括空行也会读取(空行就是只有字符\n的一行),会自动去掉\n
do
echo Line $cnt: $line
cnt=$[ $cnt + 1 ]
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: