Shell——read命令的使用

这篇具有很好参考价值的文章主要介绍了Shell——read命令的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


read命令使用的基本格式

read命令可以从标准输入中读取一行并将其拆分为字段

read命令读取单个变量

[wjj@learning ~]$ read name
zhang san
[wjj@learning ~]$ echo $name
zhang san

因为read命令是读取一行的内容,因此空格不会作为分隔符。

read命令还可以读取多个变量(变量中间用空格间隔)例如

[wjj@learning ~]$ read num num2 num3
111 222 333 
[wjj@learning ~]$ echo -e "${num}\n${num2}\n${num3}"
111
222
333

此外,read还有丰富的可添加选项,其格式:read [可添加选项] [变量名],例如:read -a arr。

可添加选项 说明
-a 把获取的数据赋给数组,数组下标从0开始
-d char 设置一个截至字符char,不会因换行和空格而终止,直到读取到char为止(不包括char)
-e 可以使用命令补全键
-i text 使用 text 作为阅读行的初始文本
-n num 设置一个读取字符数num,在读取 num个 字符后返回,而不是等待换行符,但如果在分隔符之前读取的字符少于 NCHARS 字符,则遵循分隔符
-N num 设置一个读取字符数num,在读取num个字符后返回,除非遇到 EOF 或读取超时,忽略任何分隔符(与n不同,N必须读够num个字符才会终止)
-p 在读取的时候打印指定字符串
-r 不允许转义字符\
-s 输入字符时不打印在终端上(光标也不会动)
-t time 设置一个截至时间time,time以秒为单位(超时不会获取任何字符)
-u fd 使用文件描述符 fd 作为输入源,而不是标准输入

示例

read选项示例

1)-a选项

把获取的数据赋给数组,数组下标从0开始。

[wjj@learning ~]$ read -a num
1 2 3 4     
[wjj@learning ~]$ echo -e "${num[0]}\t${num[1]}\t${num[2]}\t${num[3]}"
1	2	3	4

此时,num为一个数组,其中存储了1 2 3 4;shell只支持一维数组

2)-d选项

设置一个截至字符char,不会因换行和空格而终止,直到读取到char为止(不包括char)

[wjj@learning ~]$ read -d x name
zhang sanx
[wjj@learning ~]$ echo ${name}
zhang san

read读取到X时就会停止读取,并且读取内容包括X

3)-e选项

可以使用命令补全键

[wjj@learning ~]$ read -e file
           
.bash_history  .bash_logout   .bash_profile  .bashrc        study/         text.txt       .viminfo   

可以用过使用tab键查找当前路径下的文件,亦可以使用tab键对文件名称进行补全。

使用 text 作为阅读行的初始文本

4)-n选项

设置一个读取字符数num,在读取 num个 字符后返回,而不是等待换行符,但如果在分隔符之前读取的字符少于 NCHARS 字符,则遵循分隔符。

[wjj@learning ~]$ read -n 10 name
zhangsan
[wjj@learning ~]$ echo $name
zhangsan

设置了读取10个字符,但是读取了8个字符,通过换行符结束读取读取。

5)-N选项

设置一个读取字符数num,在读取num个字符后返回,除非遇到 EOF 或读取超时,忽略任何分隔符(与n不同,N必须读够num个字符才会终止)

[wjj@learning ~]$ read -N 10 name
zhangsan
a[wjj@learning ~]$ echo $name
zhangsan a

同样设置读取10个字符,但是换行符并不能终止读取,并且换行符被当作一个空格,直到读满10个字符终止。

6)-p选项

在读取的时候打印指定字符串。

[wjj@learning ~]$ read -p "输入用户名" name
输入用户名zhang san
[wjj@learning ~]$ echo $name
zhang san
7)-r选项

输入时不允许转义字符\\只当作普通字符。

[wjj@learning ~]$ read name
\!
[wjj@learning ~]$ echo $name
!
[wjj@learning ~]$ read -r name
\t
[wjj@learning ~]$ echo $name
\t
8)-s选项

输入字符时不打印在终端上(光标也不会动)。

[wjj@learning ~]$ read -s password
[wjj@learning ~]$ echo $password
12345
9)-t选项

设置一个截至时间time,time以秒为单位(超时不会获取任何字符)

#超时输入的情况,没有及时按enter
[wjj@learning ~]$ read -t 5 phone_num
123456[wjj@learning ~]$ 123456       #read没有读取字符,所以输入的字符跑到命令终端上了
[wjj@learning ~]$ echo $phone_num 

#打印不出来任何东西

#正常输入的情况
[wjj@learning ~]$ read -t 5 phone_num
12345
[wjj@learning ~]$ echo $phone_num 
12345
10)-u选项

read从文件中读取变量

首先,创建一个文件,里面存储三个人的姓名。

[wjj@learning ~]$ cat > test << "EOF"
> zhangsan
> lisi
> wangwu
> EOF

1)将while放在管道后面,实现逐行读取文件:

#!/bin/bash
count=0    #计数器
cat test | while read name  
do
   let count++
   echo "第${count}位:${name}"
done

2)只利用while进行循环读取:文章来源地址https://www.toymoban.com/news/detail-644591.html

#!/bin/bash
while read name
do
echo ${name} 
done < test

#也可以这样写,赋给多个变量
while read name1 name2 name3  
do
echo ${name1} ${name2} ${name3}
done < test

到了这里,关于Shell——read命令的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux运维】shell脚本检查服务器内存和CPU利用率

    在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载 将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

    2024年02月09日
    浏览(67)
  • 【Linux命令-shell】虚拟机中创建shell脚本、查看当前路径、执行脚本

    目录 一、创建shell脚本 二、查看当前的路径 三、执行脚本 一、创建shell脚本 shell脚本的特点 提前将可执行的命令语句写入一个文件中 顺序执行 解释器逐行解释代码 常见的脚本有:shell、python、PHP...... 注:用什么解释器就是什么脚本 编写shell脚本: 步骤: 1、新建文件 2、

    2024年02月05日
    浏览(71)
  • Linux shell脚本命令记录

    1、cut cut 命令可以从一个文本文件或者文本流中提取文本列。 egg:  参考:https://www.cnblogs.com/liuyansheng/p/6180332.html 2、identify identify命令主要用于获取一个或多个图像文件的格式和特性。 3、shell中#*,##*,#*,##*,%*,%%*的含义及用法    参考:shell中#*,##*,#*,##*,%*,%%*的

    2024年02月08日
    浏览(49)
  • linux&shell日常脚本命令(1)

    Linux 清理make、configure生成的文件(灵感来自于quilt安装) Linux 清理make、configure生成的文件 == make clean #清除上一次make命令生成的文件== make distclean #清除上一次make以及configure命令生成的文件 然后再 shell脚本传参 shell如何传递外部参数给文件内部使用 shell脚本传参 sub.sh run.sh

    2024年01月21日
    浏览(47)
  • Linux的shell脚本常用命令

    使用shell脚本可以将所要执行的命令行进行汇总,统一执行,制作为脚本工具,简化重复性工作 1.1.1、启动命令 假设我们拥有一个halloWord.sh的脚本,通过cd 命令进入相对应的目录下 1.1.2、记录日志 将脚本执行的内容以及输出记录在log.txt文件中,同时也控制台显示器也要输出

    2024年02月13日
    浏览(44)
  • 【Linux命令行与Shell脚本编程】第十六章 Shell函数

    脚本函数基础 函数返回值 在函数中使用变量 数组变量和函数 函数递归 创建库 在命令行中使用函数 可以将shell脚本代码放入函数中封装起来,这样就能在脚本的任意位置多次使用. 函数是一个脚本代码块,可以并在脚本中的任何位置重用它。当需要在脚本中使用该代码块时

    2024年02月14日
    浏览(55)
  • Linux 查询正在运行的shell脚本命令

    1.查看当前运行的所有进程。 ps -A 2.如果太多了找不到,看的眼花,可以加条件 grep是分组 查看正在运行的shell脚本的进程shell脚本就是 sh ps -ef |grep  sh 如图下面就是查询出来的所有sh脚本,看第三列就是脚本的进程UID,直接杀死UID就行    3.杀死进程UID kill  4491 如图 直接杀

    2024年02月12日
    浏览(50)
  • 【Linux】Shell脚本中获取命令运行的结果

    写shell脚本的时候,常需要将一个命令的运行结果做为参数传递给另外一个命令,除了我们熟知的管道 | 和args,我们也可以通过获取命令的运行结果。 执行结果: 来点复杂的应用: 再比如: 😉 运行结果: 把反引号``换成$()即可 反引号不支持嵌套,而 $ 支持嵌套。 举个例

    2024年02月11日
    浏览(40)
  • Shell脚本攻略:循环语句for

    目录 一、理论 1.for循环 2.echo命令 二、实验 1.实验一 2.实验二 3.实验三 4.实验四 5.实验五 6.实验六 7.实验七 8.实验八 9.实验九 (1)for循环的常见用法       ① 带列表的for循环 带列表的for循环用于执行一定次数的循环,其语法结构如下: for 变量名 in 取值列表 do   命令序列

    2024年02月06日
    浏览(44)
  • 【Linux命令行与Shell脚本编程】第十四章,呈现数据

    第十四章 呈现数据 1.1,标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.1.1,STDIN 标准输入 1.1.2,STDOUT 标准输出 1.1.3,STDERR 错误输出 1.2,重定向错误 1.2.1.只重定向错误 n 1.2.2.重定向错误消息和正常输出 2.1,临时重定向 2.2,永久重定向 exec 4

    2023年04月25日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包