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
    
posted @ 2020-06-01 22:48  wanwz  阅读(454)  评论(0编辑  收藏  举报