Shell变量可以直接赋值或者脚本传参的方式,还可以使用echo命令从标准输入中获得,read为bash内置命令。
[root@vm1 ~]# type echo
echo is a shell builtin
常用参数:
-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