shell-变量输入内置read命令详解

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 ))"

  

posted @ 2020-04-24 10:08  七月流星雨  阅读(865)  评论(0编辑  收藏  举报