shellread变量的读入

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

shellread变量的读⼊
shell变量的输⼊:
shell变量除了可以直接赋值或脚本传参外,还可以使⽤read命令从标准输⼊获取,read为bash内置命令,可以通过help read查看帮助。

语法格式:
read 【参数】 【变量名】
常⽤参数:
-p :设置提⽰信息
-t :设置输⼊等待的时间,单位默认为秒。

测试:read的基本读⼊
read -t 5 -p "Pls input two number:" a1 a2 #超时5秒后退出
例如:我们可以写⼀个加减乘除计算脚本,以read⽅式读⼊整数变量:
简单脚本:
1[root@bqh-117 scripts]# cat js.sh
2#!bin/sh
3read -t 15 -p "input two number:" a b
4echo $a-$b=$(($a-$b))
5echo $a+$b=$(($a+$b))
6echo $a*$b=$(($a*$b))
7echo $a/$b=$(($a/$b))
8echo $a**$b=$(($a**$b))
9echo $a%$b=$(($a%$b))
10[root@bqh-117 scripts]# sh js.sh
11input two number:8 4
128-4=4
138+4=12
148*4=32
158/4=2
168**4=4096
17 8%4=0
定义变量是也可以:
read –t 15 –p ” please input two number:” num1 num2
a=$num1
b=$num2
利⽤echo命令替代read –p的功能:
echo -n ” please input two number:” a b
read a b
思考:如果前⾯的范例脚本中读⼊的不是整数或者输⼊的数字个数不是2个,执⾏脚本会什么结果?如何解决?
解答:
上述程序可以如下思考解决:
可以模拟打游戏过关的思路,设置关卡,满⾜⼀项要求则过关,否则,game over!
第⼀关:⽤户按要求输⼊了为两个值则过关,否则,game over。

编程提⽰:可以⽤变量的字符串长度判断,例如:${#bqh}
第⼆关:⽤户输⼊的内容均为整数才过关,否则 game over
编程提⽰:⽤expr特殊技巧进⾏判断
第三关:当读⼊的参数符合个数和整数条件后,进⾏计算。

----------------------------------------------------------------------------------------------------------------------
⽅法⼀:read读⼊
1[root@bqh-117 scripts]# vim read_js.sh
2
3#/bin/sh
4read -t 8 -p "please input two number:" a b #a前⾯要有空格 5#no.1
6[ -z "$a" ]&&{ echo "first number must be int."
7 exit 1
8}
9[ -z "$b" ]&&{ echo "second number must be int."
10 exit 2
11}
12#no.2
13expr $a + $b + 1 &>/dev/null
14[ $? -ne 0 ]&&{ echo "the number you input must be int."
15 exit 3
16}
17#no.3
18echo "$a-$b =$(($a-$b))"
19echo "$a+$b =$(($a+$b))"
20echo "$a*$b =$(($a*$b))"
21if [ $b -eq 0 ];then
22echo "fenmu can not be 0,s0 /,% can not yunsuan."
23else
24echo "$a/$b =$(($a/$b))"
25echo "$a%$b =$(($a%$b))"
26fi
27 echo "$a**$b =$(($a**$b))"
测试效果如下:
⽅法⼆:read读⼊
1[root@bqh-117 scripts]# vim read_js1.sh
2#!/bin/sh
3while true
4do
5 read -t 8 -p "pls input two number:" a b
6 expr $a + 0 >/dev/null 2>&1
7[ $? -ne 0 ]&& continue
8 expr $b + 0 >/dev/null 2>&1
9[ $? -ne 0 ]&& continue || break
10done
11echo "$a-$b =$(($a-$b))"
12echo "$a+$b =$(($a+$b))"
13echo "$a*$b =$(($a*$b))"
14echo "$a/$b =$(($a/$b))"
15echo "$a**$b =$(($a**$b))"
16 echo "$a%$b =$(($a%$b))"
测试效果:
思考:如何将上述read读⼊改成脚本传参的⽅式实现?
解答:
⽅法⼀:
[root@bqh-117 scripts]# vim read_js3.sh
#!/bin/sh
a=$1
b=$2
Usage() {
echo "USAGE: number 1 number 2"
exit 1
}
if [ $# -ne 2 ];then
Usage
fi
[ "`echo "$a"|sed -r 's#[^0-9]##g'`" = "$a" ]||{
echo "number 1 must be int."
exit 2
}
[ "`echo "$b"|sed -r 's#[^0-9]##g'`" = "$b" ]||{
echo "number 2 must be int."
exit 3
}
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))"
测试效果:
⽅法⼆:
1[root@bqh-117 scripts]# vim read_js2.sh
2#!/bin/sh
3a=$1
4b=$2
5Usage() {
6echo "USAGE: number 1 number 2"
7 exit 1
8}
9if [ $# -ne 2 ];then
10Usage
11fi
12expr $a + 0 &>/dev/null
13fetval1=$?
14expr $b + 0 &>/dev/null
15fetval2=$?
16test $fetval1 -eq 0 -a $fetval2 -eq 0 ||{
17echo "pls input two number 1 and number 2 must be int." 18Usage
19}
20echo "$a-$b =$(($a-$b))"
21echo "$a+$b =$(($a+$b))"
22echo "$a*$b =$(($a*$b))"
23echo "$a/$b =$(($a/$b))"
24echo "$a**$b =$(($a**$b))"
25 echo "$a%$b =$(($a%$b))"
测试效果:
当然还有很多其他⽅法等等。

相关文档
最新文档