Shell 脚本中可以使用 read 来实现交互模式。
echo 和 read
1 2 3 4 5 6
| #!/usr/bin/env bash
echo -n "What is your name: " # echo -e "What is your name: \c" read echo "$REPLY"
|
执行该脚本,根据提示输入名字即可完成一次交互,echo 的 -n
参数可以使屏幕输出后不换行,键盘输入的内容默认使用变量 REPLY
直接用 read
1 2
| read -p "What is your name: " name echo "My name is $name"
|
可以实现跟上边相同的效果,-p
为提示信息,name
为传入参数变量
不可见
普通输入文字都是明文显示,如果想要输入密码类的内容,可以使用 -s
参数使内容不显示
1
| read -p "What is your name: " -s name
|
限制个数
使用 -n
显示参数个数,再输入参数跟回车一个效果
1
| read -n 1 -p "Are you sure delete[Y|n]: " flag
|
读取管道数据
1 2 3 4
| while read line do echo $line done
|
更多参数
1 2 3 4 5 6 7 8
| -a :将内容读入到数组中 -d :表示delimiter,即定界符,一般情况下是以IFS为参数的间隔,但是通过-d,我们可以定义一直读到出现执行的字符位置。例如read –d madfds value,读到有m的字符的时候就不在继续向后读,例如输入为 hello m,有效值为“hello”,请注意m前面的空格等会被删除。这种方式可以输入多个字符串,例如定义“.”作为结符号等等。 -e :只用于互相交互的脚本,它将readline用于收集输入行。读到这几句话不太明白什么意思,先跳过。 -n :用于限定最多可以有多少字符可以作为有效读入。例如echo –n 4 value1 value2,如果我们试图输入12 34,则只有前面有效的12 3,作为输入,实际上在你输入第4个字符‘3’后,就自动结束输入。这里结果是value为12,value2为3。 -p :用于给出提示符,在前面的例子中我们使用了echo –n “…“来给出提示符,可以使用read –p ‘… my promt?’value的方式只需一个语句来表示。 -r :在参数输入中,我们可以使用’/’表示没有输入完,换行继续输入,如果我们需要行最后的’/’作为有效的字符,可以通过-r来进行。此外在输入字符中,我们希望/n这类特殊字符生效,也应采用-r选项。 -s :隐藏输入内容,比如密码 -t :用于表示等待输入的时间,单位为秒,等待时间超过,将继续执行后面的脚本,注意不作为null输入,参数将保留原有的值
|
参考