博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell基础:使用read、命令行脚本传参实现输入2个整数并计算
阅读量:6606 次
发布时间:2019-06-24

本文共 2828 字,大约阅读时间需要 9 分钟。

shell基础练习题:使用read交互输入,命令行脚本传参2种方式,实现输入2个整数数字,并计算加减乘除。考察shell基础知识包括:变量定义、read、if判断语句、正则表达式等知识;


第一种方式:read交互输入参数

思路为:判断输入的第2个变量是否为空,为空则提示输入2个数字;不为空则判断输入的是否为整数,用到expr,作用为让2个变量进行相加,如果结果为0说明输入2个为数字,如结果非0则说明输入非整数,提示输入的不是非整数;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
read 
-p 
"pls input two number:" 
a b
if  
[ ! -z $b ]
then
     
expr 
$a + $b &>
/dev/null
     
if 
[ $? -
eq 
0 ]
      
then
          
echo 
"a-b=$(($a-$b))"
          
echo 
"a+b=$(($a+$b))"
          
echo 
"a*b=$(($a*$b))"
          
echo 
"a/b=$(($a/$b))"
         
else
              
echo 
"input is not zhengshu"
         
fi
else
     
echo 
"you must input two number"
fi

执行结果如下:输入字母会报错,输入不是整数;只输入1个参数也会报错;

1
2
3
4
5
6
7
8
9
10
11
12
[baby@localhost ~]$ sh a.sh
pls input two number:4 2
a-b=2
a+b=6
a*b=8
a
/b
=2
[baby@localhost ~]$ sh a.sh
pls input two number:a 2
input is not zhengshu
[baby@localhost ~]$ sh a.sh
pls input two number:10
you must input two number

脚本有bug,如果输入3个参数的话会报错如下:

[baby@localhost ~]$ sh a.sh

pls input two number:1 3 3

a.sh: line 3: [: 3: binary operator expected

you must input two number

针对上面的脚本bug修改如下:

思路为:多添加一个变量c,并多了if判断,先判断$a是否为空,如为空提示输入2个数字并退出;然后判断$b是否为空,如未空提示输入2个数字并退出;只有$a $b都不为空即都有输入值,再判断$c是否为空,如未空执行下面的整数判断,如$c不为空同样提示输入2个数字并退出;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/bin/bash
read 
-p 
"pls input two number:" 
a b c
if 
[ -z $a ]
  
then
 
echo 
"you must input two number"
 
exit
elif 
[ -z $b ]
  
then
 
echo 
"you must input two number"
 
exit
fi
if 
[ -z $c ]
then
 
expr 
$a + $b &>
/dev/null
 
if 
[ $? -
eq 
0 ]
  
then
  
echo 
"a-b=$(($a-$b))"
  
echo 
"a+b=$(($a+$b))"
  
echo 
"a*b=$(($a*$b))"
  
echo 
"a/b=$(($a/$b))"
 
else 
  
echo 
"input is not zhengshu"
 
fi
else
 
echo 
"you must input two number"
fi

执行结果如下,什么都不输入,输入一个字符都会提示必须输入2个数字;输入2个值中有字母提示输入的非整数;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[baby@localhost ~]$ sh a.sh  
pls input two number:
you must input two number
[baby@localhost ~]$ sh a.sh
pls input two number:1
you must input two number
[baby@localhost ~]$ sh a.sh
pls input two number:1 a
input is not zhengshu
[baby@localhost ~]$ sh a.sh
pls input two number:2 1
a-b=1
a+b=3
a*b=2
a
/b
=2

第二种方式:命令行脚本传参方式

思路为:定义a b两个变量,接受命令行传递的参数;$#为输入参数的总个数;判断输入的参数个数不等于2,则提示必须输入2个数字;等于2的话执行下面的脚本;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[baby@localhost ~]$ 
cat 
b.sh
#!/bin/bash
a=$1
b=$2
if 
[ $
# -ne 2 ]
then
 
echo 
"you must input two number"
 
exit 
1
else
 
expr 
$a + $b &>
/dev/null
 
if 
[ $? -
eq 
0 ]
  
then
  
echo 
"a-b=$(($a-$b))"
  
echo 
"a+b=$(($a+$b))"
  
echo 
"a*b=$(($a*$b))"
  
echo 
"a/b=$(($a/$b))"
 
else
  
echo 
"input is not zhengshu"
  
exit 
1
 
fi
fi

执行结果如下:传参为空,参数为3个都会提示必须输入2个数字;传参包含非数字则提示输入的不是整数;

1
2
3
4
5
6
7
8
9
[baby@localhost ~]$ sh b.sh 3 a
input is not zhengshu
[baby@localhost ~]$ sh b.sh 3 2 3
you must input two number
[baby@localhost ~]$ sh b.sh 3 2
a-b=1
a+b=5
a*b=6
a
/b
=1

总结:

read可以和用户交互性较好,脚本较为复杂多了if判断效率不高;

命令行传参使用表达式判断输入参数,执行效率和理解性较好;

本文转自 模范生 51CTO博客,原文链接:http://blog.51cto.com/mofansheng/1702758,如需转载请自行联系原作者
你可能感兴趣的文章
Network Monitor 查询命令和MySQL命令
查看>>
好“戏”刚刚开幕 云计算逐步被认可
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
LinkedIn文本分析平台:主题挖掘的四大技术步骤
查看>>
以全局产业观领航智慧城市建设
查看>>
Intel 18核酷睿i9因故延期到明年:AMD Ryzen反超
查看>>
5G网络不止能1秒下一部电影,它还能够…
查看>>
英特尔:McAfee将剥离出去独立运营
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>
《CCNP SWITCH 300-115认证考试指南》——导读
查看>>
《设计之外——比修图更重要的111件事》—第1部分3 虚心学习
查看>>
Solaris Studio 12.4 Beta update 7/2014
查看>>
EVCache —— Netflix 的分布式内存数据存储
查看>>
《用友ERP-U8(8.72版)标准财务模拟实训》——1.4 系统管理注册和导入演示账套...
查看>>
《Node.js区块链开发》一3.6 总结
查看>>
《UG NX8.0中文版完全自学手册》一2.8 布尔运算
查看>>
pera 发布新概念浏览器 Neon ,内置分屏模式
查看>>
移动阅读时代“长文章”生存状态调查
查看>>