zoukankan      html  css  js  c++  java
  • shell-变量输入内置read命令详解

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

      

  • 相关阅读:
    算法导论第11章 散列表
    Ubuntu14.04上安装Jupyter的方法
    WinSCP连接远程的Ubuntu失败
    K-means和K-means++好的网站
    Ubuntu14.04上安装pip的方法
    算法导论第一章
    微服务架构的特点
    国内maven仓库地址 || 某个pom或者jar找不到的解决方法
    REST or RPC?
    zookeeper安装及环境变量设置
  • 原文地址:https://www.cnblogs.com/scajy/p/12765596.html
Copyright © 2011-2022 走看看