Shell脚本学习-read命令

 

Shell变量可以直接赋值或者脚本传参的方式,还可以使用echo命令从标准输入中获得,read为bash内置命令。

[root@vm1 ~]# type echo
echo is a shell builtin

Shell脚本学习-read命令_第1张图片

常用参数:

-p prompt:设置提示信息,我们看help内容的信息:输出PROMT字符串信息,这个字符串没有换行符的结尾,在read之前。

-t timeout: 设置超时时间,如果超出了这个时间还没有结束输入,read就不存储任何数据。单位默认为秒。

-n nchars: 读取nchars个字符后,就返回,而不是等到newline换行。还提到了分隔符,如果这个分隔符少于nchar个字符,那就读取分隔符之前的内容。

-r: 不允许反斜线进行转移:escape:逃跑转义。

-s:从终端输入的时候不显示,那这个场景正常是密码输入的时候。

我们能从help或者man中,通过阅读英文能学到更多的内容。鼓励多看man学习。

示例1:

[root@vm1 ~]# read -p "Please input two number: " a1 a2
Please input two number: 3 4
[root@vm1 ~]# echo $a1
3
[root@vm1 ~]# echo $a2
4

示例2:

[root@vm1 ~]# read -sp "Please input password: " password
Please input password: [root@vm1 ~]#
[root@vm1 ~]# echo $password
123456

 说明:在终端输入密码123456的时候,并没有把密码显示出来。

示例3:

[root@vm1 ~]# read -r a
\123
[root@vm1 ~]# echo $a
\123
[root@vm1 ~]# read a
\123
[root@vm1 ~]# echo $a
123

示例4:

[root@vm1 scripts]# cat jisuan3.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))"

说明:read后面接的是普通变量。谁运行脚本程序,谁输入数据。

传参和read是两种变量赋值的方法,不能混用。

[root@vm1 scripts]# sh jisuan3.sh
Please input two number: 10 5
a-b=5
a+b=15
a*b=50
a/b=2
a**b=100000
a%b=0

以read命令读入及传参的综合企业案例:

#!/bin/bash
#
read -p "Please input two numbers: " a b

[ ${#a} -le 0 ] && {
    echo "the first num is null"
    exit 1
}

[ ${#b} -le 0 ] && {
    echo "the second num is null"
    exit 1
}

expr $a + 1 >/dev/null 2>&1
RETVAL_A=$?
expr $b + 1 >/dev/null 2>&1
RETVAL_B=$?
if [ $RETVAL_A -ne 0 -o $RETVAL_B -ne 0 ] ; then
    echo "one of the num is not num.Please input again."
    exit 1
fi

echo "a-b=$(($a-$b))"
echo "a+b=$(($a+$b))"
echo "a*b=$(($a*$b))"
echo "a**b=$(($a**$b))"

if [ $b -eq 0 ] ; then
    echo "your input does not allow to run."
    echo "a/b = error"
    echo "a%b = error"
else
    echo "a/b=$(($a/$b))"
    echo "a%b=$(($a%$b))"
fi

你可能感兴趣的:(Shell,linux)