zoukankan      html  css  js  c++  java
  • bash-read使用方法

    read用法

    1. 通过read命令获取用户输入,并存入一个变量
    2. 读取的值默认是以空格分隔,可以通过自定义环境变量IFS修改分隔标志
      1. IFS的默认值是空格、Tab符号、换行符号,通常选取空格

    格式

    通过read命令获取用户输入,并存入一个变量

    read [options] [variable...]
    	options:
    		-t #:超时的秒数,超过指定时间,用户仍然没有输入,脚本放弃等待,继续向下执行
    		-p "text":指定用户输入的提示信息
    		-a:把用户输入赋值给一个数组,从0号开始
    			]# read -a name
    			]# zhao qian sun li
    			]# echo ${name[2]}
    			]# sun
    		-n [#]:指定只读取若干个字符作为变量值,而不是整行读取
    			]# read -n 3 text
    			]# asdfghjkl
    			]# echo $text
    			]# asd
    		-e:允许用户输入的时候,使用readline库提供的快捷键,例自动补全
    		-d delimiter:定义字符串delimiter的第一个字符作为用户输入的结束,而不是一个换行符
    		-r:raw模式,表示不把用户输入的反斜杠字符解释为转义字符
    		-s:设置用户的输入不在屏幕上显示,常常用于输入密码或保密信息
    

    示例

    1. 除了读取键盘的输入,可以用来读取文件

      while read line
      do
      	echo "$line"
      done < $filename
      例:
      #bin/bash
      input="/path/to/file"
      while read -r line
      do
      	echo "$line"
      done < "$input"
      
    2. 变量与用户输入值的关系

      1. 一个变量对应一个值

        read -t 3 -p "Please Enter your name:" NAME
        echo "Hi,$NAME"
        
      2. 一个变量对应一整行数据

      3. 多个变量对应多个值:一一对应赋值

        read -n -p "Please Enter your firstname and lastname:" FN LN
        echo "Hi,$LN $FN"
        
      4. 多个变量对应大于变量数的值:多余的输入项包含到最后一个变量中

        echo -n "Enter two values: "
        read a b c
        echo "$a $b $c"
        
      5. 多个变量对应小于变量数的值:额外的变量值为空

        read -p "Enter three values:" a b
        echo "$a $b"
        
      6. 没有定义变量:环境变量"REPLY"包含所有的输入 = 一个变量对应一整行数据

        read -n -p "Enter values: "
        echo "REPLY='$REPLY'"
        
    3. IFS定义分隔符为":"

      #!/usr/bin/env bash
      FILE=/etc/passwd
      read -p "Enter a username: " user_name
      INFO=$(grep "^${user_name}" $FILE)
      
      if [ -n $INFO ]; then
      	IFS=":" read user pw uid gid name home shell <<< $INFO
      	echo "User = $user"
      	echo "UID = $uid"
      	echo "GID = $gid"
      	echo "Passwd = $pwd"
      else
      	echo "No such user $user_name" &>/dev/null
      	exit 1
      fi
      
  • 相关阅读:
    dirname,basename的用法与用途
    终极解决方案——sbt配置阿里镜像源,解决sbt下载慢,dump project structure from sbt耗时问题
    linux-manjaro下添加Yahei Hybrid Consola字体
    Idea无法调出搜狗等中文输入法
    Spring 源码学习系列
    BF算法
    Mybatis Mapper接口是如何找到实现类的-源码分析
    Lua脚本在redis分布式锁场景的运用
    GO语言一行代码实现反向代理
    SpringMVC源码分析-400异常处理流程及解决方法
  • 原文地址:https://www.cnblogs.com/wanwz/p/13025646.html
Copyright © 2011-2022 走看看