1. shell变量的输入
shell变量除了可以直接赋值或脚本传参外,还可以使用read命令从标准输入得。
【语法格式】
read [参数] [变量名]
【常用参数】
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
2. 举例
范例1:read的基本读入
[root@1-241 scripts]# read -p "please input two nomber:" a1 a2 please input two nomber:12 13 [root@1-241 scripts]# echo $a1 $a2 12 13 提示:上面read -p 的功能可以用echo和read实现。 echo -n "please input two number:" read a1 a2 以上两句和下面的命令相当(-t 排除在外) read -t 5 -p "please input two nomber:" a1 a2 #5 秒超时退出
范例2:实践考试题
把加减乘除计算的脚本改成通过read方式读入整数变量:
[root@1-241 scripts]# cat test_shuangkuohao.sh #!/bin/bash a=$1 b=$2 echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))" 范例2:的参考答案 [root@1-241 scripts]# cat test_read.sh #!/bin/bash read -p "please input two number:" a b echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))"
范例3:利用echo命令替代和read -p的功能
[root@1-241 scripts]# cat test_read_echo.sh #!/bin/bash echo -n "please input two number:" read a b echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))"
范例4:思考:如果读入的不是整数,或者参数个数不是2个,以上shell脚本的执行会有什么结果?
[root@1-241 scripts]# cat test_read.sh #!/bin/bash while true do read -p "please input two number:" a b expr $a + 0 &>/dev/null [ $? -ne 0 ] && continue expr $b + 0 &>/dev/null [ $? -ne 0 ] && continue ||break done echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))"
范例5:改成命令行传参的方式
[root@1-241 scripts]# cat test_read_if.sh #!/bin/bash a="$1" b="$2" NUM(){ echo "sh $0 num1 num2" exit 1 } if [ $# -ne 2 ] then NUM fi expr $a + 0 &>/dev/null [ $? -ne 0 ] && NUM expr $b + 0 &>/dev/null [ $? -ne 0 ] && NUM echo "a-b=$(( $a - $b ))" echo "a+b=$(( $a + $b ))" echo "a*b=$(( $a * $b ))" echo "a/b=$(( $a / $b ))" echo "a**b=$(( $a ** $b ))" echo "a%b=$(( $a %$b ))"