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

  

最新文章

  1. AliSQL的编译使用
  2. Memcache知识点梳理
  3. instancetype
  4. angular 和jq 的AJAX的请求区别
  5. spring的声明式事务内部图
  6. Python中的注释(转)
  7. Start my cnBlogs
  8. 排列组合函数next_permutation()
  9. cf437B The Child and Set
  10. Driver Signing changes in Windows 10
  11. video标签 拖动 转自w3school
  12. python的Error集,17个新手常见Python运行时错误
  13. PHP命令空间namespace及use的用法实践总结
  14. 学习python的第二天
  15. bzoj 4326: NOIP2015 运输计划(二分+树链剖分)
  16. 软件工程——移动的HelloWorld
  17. 【做题】codechefCOUNTARI——分块FFT
  18. POJ2566 Bound Found 2017-05-25 20:05 32人阅读 评论(0) 收藏
  19. [转]mysql 一个表两列的值交换
  20. 代码管理(五)git 删除分支

热门文章

  1. 【IDEA】【SpringBoot】基于idea对springboot程序远程调试
  2. vue 页面首次加载缓慢原因及解决方案
  3. DVWA_sql injection(low)
  4. composer 三大组成部分
  5. Scrapy框架的架构原理解析
  6. Javaweb应用中配置错误跳转页面
  7. Matrix Power Series(POJ 3233)
  8. python 3 for嵌套
  9. Java源码之HashMap的hash篇
  10. 安装最新LAMP环境(CentOS7+PHP7.1.5+Mysql5.7)