akyou56 发表于 2018-8-22 07:46:13

shell read用法分析_学习笔记

  时间:2017.12.19
  作者:李强
  参考:man,info,magedu讲义,万能的internet
  实验环境:CentOS 6.9与CentOS7.4
  声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
  读取用户输入:
  1、read
  read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd]
  read接收的和cat一样是标准输入。他会将接收来自stdin或者从fd中(如果-u选项使用的话)的单独一行,然后每行划分成像单词一样的段。你指定几个变量划分成几个段,以空格为分隔符,目前看是如此。然后把空格分割的段赋值个定义的变量。
  

#read xy  
1x 2y 3z
  
#echo $x
  
1x
  
#echo $y
  
2y 3z
  
#
  

  这里我们指定了2个name,然后就会把输入的"1x 2y 3z"这一行,以空格划分成2段,前面是1x,后面是"2y 3z"。然后前面复制给x,后面赋值给y
  。如果只指定了x,那么一整行都会赋给x,如果没有指定name,存放在REPLAY变量中
  选项:
  -p prompt:prompt,提示信息,其后跟name把用户stdin存放到name中
  -ttimeout :timeout,用户一定时间不输入,就退出程序
  -s:不打印来自终端的输入,可用于密码输入,但是回车后并没有换行。
  -ddelim:以某个定界符来终止变量内容的读取。
  -e:
  -r   :禁止反斜线做为转义符使用,就是单纯的反斜线字符。
  -a array :
  -nnchars:
  -N nchars:
  

1)、test read  
$. 5.shsecond line
  
> three line
  
> last line
  
> eof
  
word:first lne
  
$cat 5.sh
  
#!/bin/bash
  
#test read wordsplit
  
readword
  
echo word:$word
  

  
如上所示:第一行的内容给了第一个变量word 后面没有指定name,就没了。
  

  
2)、#test read-d
  
$. 3.sheof
  
pwd1:123
  
pwd2:
  
$cat 3.sh
  
#!/bin/bash
  
#test read-d
  
read -d "," -p "输入密码:" pwd1 pwd2
  
echo -e "pwd1:$pwd1\npwd2:$pwd2"
  

  
3)、#test read -r
  
$vi 3.sh
  
#!/bin/bash
  
read-rp "输入密码:" pwd1
  
echo"pwd1:$pwd1"
  
$. 3.sh
  
输入密码:1\n2
  
pwd1:1\n2
  
$vi 3.sh
  
#!/bin/bash
  
#test read -r
  
#read-rp "输入密码:" pwd1
  
read-p "输入密码:" pwd1
  
echo"pwd1:$pwd1"
  
$. 3.sh
  
输入密码:1\n2
  
pwd1:1n2
  

  

  4)、read -u
  while read -u3 i && read -u4 j;do
  echo $i $j
  done 3
页: [1]
查看完整版本: shell read用法分析_学习笔记