《Linux命令行与shell脚本编程大全》第十四章 处理用户输入 (3)

 

《Linux命令行与shell脚本编程大全》第十四章 处理用户输入

 

14.5 将选项标准化

有一些选项是标准化了,约定俗成的东西。自己写的脚本中可以支持这些选项。这样用户使用你的脚本就不用查手册了。

比如:

-a 显示所有对象

-c 生成一个计数

-h 显示命令的帮助信息

-I 忽略文本大小写

-v 生成详细输出

……

 

14.6 获得用户输入

使用场景:脚本运行时可以问个问题,并等待运行脚本的人来回答。

为此提供了read命令

14.6.1 基本的读取

read命令从标准输入或另外一个文件描述符中接收输入。收到输入后read将数据放进一个变量中去。

read 还可以接 –p选项,允许在read命令行指定提示符。

还可以指定多个变量,如果变量数量不够,那么剩下的数据就全部分配到最后一个变量中。

如果没有指定变量名,会放到环境变量REPLY中。

例子:

  1 #!/bin/bash

  2 echo -n  "Please input you name:"

  3 read name

  4 echo "Hello $name, welcome to xcy program"

  5 read -p "Please input you age: " age  # 指定提示符

  6 echo "you are live:$[ $age * 365 ] days"

  7 read -p "step2 Please input you company and num:" company num  # 多个变量

  8 echo "you company:$company, num:$num"

  9 read -p "REPLY test:" # 不值得变量名

 10 echo "You input REPLY = $REPLY"

运行:

《Linux命令行与shell脚本编程大全》第十四章 处理用户输入

14.6.2 超时

如果使用了read,脚本会一直等待用户输入。

如果不管脚本是否有数据输入都继续执行下去,就可以指定一个定时器。

-t 指定一个计时器,指定了read命令等待输入的秒数。定时器过期后,read返回一个非0退出状态码。

 

还可以不对输入过程计时,而是统计字数,字数到了就自动退出,将输入数据赋给变量。

用-n选项,后面接字数

例子:

  1 #/bin/bash

  2 if read -t 10 -p "Input you name:" name  # 计时

  3 then

  4         echo "Hi $name, welcome"

  5 else

  6         echo

  7         echo "sorry, to slow"

  8 fi

  9

 10 read -n1 -p "Do you want to continue [Y/N]? " answer # 限定字符

 11 case $answer in

 12 Y) echo

 13 echo "you are continue ......";;

 14 N) echo

 15 echo "Bye Bye!!!";;

 16 *) echo

 17 echo "Error, Bye";;

 18 esac

 

14.6.3 隐藏方式读取

比如输入密码,不想别人看见,就需要隐藏输入。

加 –s 选项

比如:

  1 #!/bin/bash

  2 read -s -p "input you Pass:" Pass

  3 echo

  4 read -s -p "input you Pass again:" Pass1

  5 echo

  6 if [ $Pass = $Pass1 ]  # 字符串比较是否相同

  7 then

  8         echo "Success!!!"

  9 else

 10         echo "Falied, Two inconsistent"

 11 fi

 

14.6.4 从文件中读取

每次调用read命令,它都会从文件中读取一行文本。当文本没有内容时,read返回非零退出状态码。

难点在于将文件中的数据传给read命令。最常见的方法是对文件使用cat命令,将结果通过管道直接传给含有read命令的while命令。

例子:

  1 #!/bin/bash

  2 read -p "Please input you read file name:" name

  3 if [ -e $name ]  # 是否存在

  4 then

  5         count=1

  6         cat $name | while read line     

  7         do

  8                 echo "Line $count:$line"

  9                 count=$[ $count + 1 ]

 10         done

 11 else

 12         echo "$name not exist"

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygfdy.html