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进行循环读取:

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

#也可以这样写,赋给多个变量
while read name1 name2 name3  
do
echo ${name1} ${name2} ${name3}
done < test
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
第1章 了解Linux内核 1. 1 Linux内核 1. 2 查看Linux内核状况 1. 3 编程序检查系统状况 1. 4 Linux编程环境 第2章 shell 2. 1 she11 2. 2 实现一个简单的shell程序 2. 3 shell编程 第3章 内核时钟 3. 1 关于时钟和定时器 3. 2 Linux系统时钟 3. 3 Linux系统定时器 3. 4 时钟命令介绍 3. 5 定时器的应用 第4章 内核模块 4. 1 概述 4. 2 模块实现机制 4. 3 实例 第5章 系统调用 5. 1 一个简单的例子 5. 2 系统调用基础知识 5. 3 相关数据结构. 源代码分析及流程 5. 4 详细讲解一个系统调用的实现 5. 5 简单系统调用的添加 5. 6 较高级主题:添加一个更复杂的系统调用 第6章 共享内存 6. 1 进程间通信和共享内存 6. 2 共享内存的APl 6. 3 实现共享内存的源代码 6. 4 利用共享内存进行进程间通信 第7章 虚拟存储 7. 1 虚拟内存管理 7. 2 Linux虚拟内存管理 7. 3 实例 第8章 进程的同步 8. 1 同步机制 8. 2 Linux中几种同步机制的实现 8. 3 设计我们自己的同步机制 第9章 进程调度 9. 1 进程调度简介 9. 2 进程调度的策略与算法 9. 3 进程调度的实现 9. 4 改进进程调度算法的实现 第10章 设备驱动 lo. 1 Linux下驱动程序的相关概念 10. 2 传统的设备管理方式 10. 3 块设备的请求队列 lo. 4 设备文件系统devfs 10. 5 驱动程序的框架及实例分析 10. 6 设计自己的驱动程序 第11章 文件系统 11. 1 文件和目录 11. 2 文件系统的框架 11. 3 VFS文件系统 11. 4 ext2文件系统 11. 5 open. Close和read. write操作 11. 6 buffer cache 11. 7 实验:添加一个文件系统 11. 8 附录:优秀的日志文件系统--ext3
linux分为:redhat linux系列和debian系列。 X Window是一种协议。 unix图形环境是CDE:common desktop environment通用桌面环境。 linux系统结构:硬件、内核层、shell层、应用层、用户。 在安装linux的时候,会弹出 CD Found To begin testing the CD media before installation press OK. Choose Skip to skip the media test and start the installation. OK Skip 选择:"OK"就开始检测CD光盘的完好性,"Skip"则跳过光盘介质的检测,直接开始安装。 说明:下载镜像文件的时候一般会给出MD5值,只要检测MD5值是不是一样就行了,就不必进行检测了。检测过程很长。 安装linux的时候,选择语言为简体中文,并不代表安装完后linux就显示为简体中文,这里选择语言是安装过程的语言。这是安装界面上会提示:What language would you like to use during the installation process?在安装过程中你想使用什么语言? linux中每一个目录可以单独划分磁盘空间,但这个目录仍在/目录下,例如将tmp目录单独划分磁盘空间为100M,如果/目录在第一块磁盘中,则tmp在第二块磁盘中。但tmp目录仍然在/目录下。在做服务器时应该将web目录单独划分一个磁盘空间。如果sda1表示/分区,则sda2表示tmp分区。sdb表示第二块scsi硬盘,即电脑上有两块硬盘。sda1和sda2相当于windows下的c盘和d盘的关系。 各种接口的磁盘在linux中文件名分别为: /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash等接口的磁盘文件名。第一块硬盘为sda,第二块硬盘为sdb,根据主板上的接口来决定的。将第一块硬盘分两个区,就有sda1和sda2。 /dev/hd[a-p][1-63]:为IDE接口的磁盘文件名。 linux中必须要划分的分区有两个:根分区/、swap分区。 linux中的文件(普通文件或设备文件等)都必须有挂在点,只有挂载到一个目录下才能访问,swap分区是不需要挂载点的,在分区的时候,将文件系统类型选为swap,挂载点自动会变为灰色。一般linux中的swap大小为内存的两倍。swap类似windows下的虚拟内存。 切换用户命令:su - 用户名 vim中的插入命令: a 在光标后附加文本 A 在本行行末附加文本 i 在光标前插入文本 I 在本行开始处插入文本 o 在光标下一行插入新行附加文本 O 在光标上一行插入新行附加文本 查找时区分大小写使用命令:set noic 查找时忽略大小写使用命令:set ic 退出命令:wq与ZZ命令等价。 导入文件:在末行模式下,输入:r /home/text,即将text文件中的内容导入到当前编辑的文件中,导入到光标处。在gvim中也可以使用命令。 在末行模式下输入:!命令,如:!ls /home,就会显示ls命令的结果,会提示按enter键或任意键返回。在gvim中也可以执行此命令,如:!dir,就会显示当前目录中的信息。 导入文件命令和!命令以结合起来使用,在末行模式下输入:r !命令。就会将命令的结果导入到当前文件光标处。 bin:binary usr:user sbin:super binary linux中命名规则:除了/之外,所有的字符都合法。大小写敏感,以.开头的文件是隐藏文件。 命令格式:命令 -选项 参数 当有多个选项时,可以写在一起。 ..表示当前目录的父目录,cd ..当中一定有个空格。 文件处理命令:ls 命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示当前或指定目录中的文件 语法:ls 选项[-ald] [文件或目录] -a 显示所有文件,包括隐藏文件,a是all的缩写。 -l 详细信息显示,l是long的缩写。 -d 查看目录属性 在一个目录中查看当前目录的详细信息:ls -ld .即可。 在一个目录中查看当前目录的父目录的详细信息:ls -ld ..即可。 root执行的命令一般放在/sbin或/usr/sbin目录中,所有用户都能执行的命令一般放在/bin或/usr/bin目录中。 d 表示目录 - 表示二进制文件 l 软链接文件link 详细分析:drwxr-xr-x 2 root root 4096 12-01 20:52 bin drwxr-xr-x r:read w:write x:execute执行 -:表示无此权限 所有者:u user 所属组:g group 其他人:o other 2:表示硬链接数。 第一个root:是所有者。 第二个root:是所属组。 4096:目录大小,不是目录中所有文件的大小。 12-01 20:52是创建时间或最后修改的时间 bin 文件名或目录名 Linux中数据块是储存数据的基本数据单元,在linux中可以设置3中数据块大小分别是1024(1kB),2048(2KB),4096(4KB)。数据块大小决定了文件磁盘占有量,如果设置了数据块大小是1024,不管文件有多大,至少要占1KB的空间,所以可以根据存放文件的大小来合理设置数据块大小。 设置数据块:mkfs.ext3 -b 2046 /dev/hda5,格式化并设置数据块为2KB。另外linux在每个分区都有保留块,这是专门留给root用户及其所属组使用,别的用户是无法使用的,一般为总数据块的5%,但是如果你的磁盘大的话,就显的浪费了。 mkfs.ext3 -b 2046 -m 2 /dev/hda5。格式化并设置数据块为2KB,设置保留块为2%。或者用tune2fs -m 2 /dev/hda4 这种方法不用格式化就可设置。 tune2fs -l /dev/hda5,可以查看文件系统的详细信息. tune2fs -j /dev/hda4,可以将ext2转换为ext3而不损坏数据。 文件系统的检查工具:fsck e2fsck e2fsck 用时有危险,不能很好的辨识文件系统,特别是ext2,ext3混用时。 fsck得用法:fsck -t ext3 /dev/hda5 或 fsck.ext3 /dev/hda5。 root用户使用su -用户名切换用户时是不需要密码的,但是普通用户切换账户需要密码。 查看一个文件的信息,ls -l /.../文件名。 查看一个目录的信息,ls -ld 目录名。 查看/目录的详细信息,而不是/目录下目录或文件的详细信息。-d查看目录属性。 ls的-d选项是查看目录属性。 文件处理命令:mkdir 命令名称:mkdir 命令英文原意:make directories 命令所在路径:/bin/mkdir 执行权限:所有用户 语法:mkdir [ 目录名] 功能描述:创建新目录 范例:$ mkdir newdir 文件处理命令:touch 命令名称:touch 命令所在路径:/bin/touch 执行权限:所有用户 语法:touch [文件名] 功能描述:创建空文件 范例:$ touch newfile 文件处理命令:cp 命令名称:cp 命令英文原意:copy 命令所在路径:/bin/cp 执行权限:所有用户 语法:cp -R [源文件或目录] [ 目的目录] -R 复制目录 -p 复制后的文件的时间和原文件时间一样 功能描述:复制文件或目录 范例: $ cp file1 file2 dir1 将文件file1、file2复制到目录dir1 $ cp -R dir1 dir2 将dir1下的所有文件及子目录复制到dir2 文件处理命令:mv 命令名称:mv 命令英文原意:move 命令所在路径:/bin/mv 执行权限:所有用户 语法:mv [源文件或目录] [目的目录] 功能描述:移动文件、更名 范例: $ mv file1 file2 将当前目录下文件file1更名为file2 $ mv /home/zk/text.c /home/text.cpp 将文件text.c移动到目录home下,并更名为text.cpp 文件处理命令:rm 命令名称:rm 命令英文原意:remove 命令所在路径:/bin/rm 执行权限:所有用户 语法:rm -r [文件或目录] -r 删除目录 功能描述:删除文件 范例: $ rm file3 删除文件file3,删除时会出现提示。 $ rm -r dir1 删除目录dir1,删除目录时会出现提示。 由于linux中的别名机制,使用rm等价与使用rm -i,这样在删除文件或目录时会有提示,如果不想出现提示内容,需要加选项-f。写脚本的时候需要加上-f,因为批量删除文件或目录不需要每次都提示询问。 在unix中rm删除文件是不是出现提示询问的。 文件处理命令:cat 命令名称:cat 命令英文原意:concatenate and display files 命令所在路径:/bin/cat 执行权限:所有用户 语法:cat [文件名] 功能描述:显示文件内容 范例:$ cat /etc/issue $ cat /etc/services cat查看文件内容,当文件较长时,无法查看到文件开头的内容,只能看到最后的内容。cat是一次性显示完文件内容。 文件处理命令:more 命令名称:more 命令所在路径:/bin/more 执行权限:所有用户 语法:more [文件名] (空格) 或f 显示下一页 (Enter) 显示下一行 q或Q 退出 功能描述:分页显示文件内容 范例: $ more /etc/services 文件处理指令:head 指令名称:head 指令所在路径:/bin/head 执行权限:所有用户All User 语法:head -num [文件名] -num 显示文件的前num行 功能描述:查看文件的前几行 范例:$ head -20 /etc/services 不加选项默认是查看前10行。 文件处理指令:tail 指令名称:tail 指令所在路径:/bin/tail 执行权限:All User 语法:tail -num [文件名] -num 显示文件的后num行 -f 动态显示文件内容 功能描述:查看文件的后几行 范例:$ tail -30 /etc/services 查看日志文件的时候,日志文件是动态变化的。 文件处理命令:ln 命令名称:ln 命令英文原意:link 命令所在路径:/bin/ln 执行权限:所有用户 语法:ln [源文件][ 目标文件] 创建硬链接 ln -s [源文件][ 目标文件] 创建软链接 功能描述:产生链接文件 范例: $ ln -s /etc/issue /issue.soft 创建文件/etc/issue的软链接/issue.soft $ ln /etc/issue /issue.hard 创建文件/etc/issue的硬链接/issue.hard $ln -s /etc/issue /issue.soft 用ls -l查看软链接文件有如下信息 lrwxrwxrwx root root 10 12-01 23:12 /issue.soft ->/etc/issue 软链接文件的权限都是lrwxrwxrwx,信息中有一个箭头指向原文件,且软链接文件的大小很小,时间和原文件也不同。软链接文件类似windows下的快捷方式。 1、不允许给目录创建硬链接; 2、只有在同一文件系统中的文件之间才能创建链接。 生成一个硬链接文件后查看原文件和硬链接文件,除了文件位置或文件名不同外,其余的信息都是相同的。硬链接文件和原文件是同时更新的,因为他们有相同的inode节点。索引节点inode:Linux为每个文件分配一个称为索引节点的号码inode,可以将inode简单理解成一个指针,它永远指向本文件的具体存储位置。系统是通过索引节点(而不是文件名)来定位每一个文件。建立硬连接实际上只是增加了一个目录项,但并没有复制文件数据区,原文件的数据区由两个文件共享。这一方面能够节约大量磁盘空间,同时可以保证两个文件能同步更新。 ls -i或--inode 显示文件和目录的inode编号。 权限管理命令:chmod 命令名称:chmod 命令英文原意:change the permissions权限 mode of a file 命令所在路径:/bin/chmod 执行权限:
目 录 一、Linux基础 5 1.什么是Linux? 5 2.什么是自由软件、GNU和GPL? 5 3.从技术上说,Linux有什么优点? 5 4.我需要学习Linux吗? 5 5.Linux会取代Windows吗? 6 6.Linux与WindowsNT谁更好? 6 7.Linux与UNIX有什么不同? 6 8.Linux能应用在哪些领域呢? 6 9.Linux作系统发展现状和未来如何? 6 10.Linux对软件业有什么影响呢? 6 11.我该如何学习Linux呢? 6 12.网上有哪些Linux资源? 7 13.RedHat Linux 6.5和Linux 2.4哪个版本高? 7 14.Linux的发行版有哪些? 7 15.RedHat Linux有哪些特点? 7 16.TurboLinux有哪些特点? 7 17.BluePoint、Xterm、RedFlag三种中文Linux谁好? 7 18.哪种版本Linux适合我? 7 19.如何得到Linux? 8 二、用户和用户组管理 8 ※一、Linux系统用户账号的管理 8 ※1、添加新的用户账号使用useradd命令,其语法如下: 8 ※2、删除帐号 8 ※3、修改帐号 8 ※4、用户口令的管理 9 ※二、Linux系统用户组的管理 9 ※1、增加一个新的用户组使用groupadd命令。其格式如下: 9 ※2、如果要删除一个已有的用户组,使用groupdel命令,其格式如下: 9 ※3、修改用户组的属性使用groupmod命令。其语法如下: 9 ※4、如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其它用户组的权限。用户可以在登录后,使用命令newgrp切换到其它用户组,这个命令的参数就是目的用户组。 10 ※三、与用户账号有关的系统文件 10 ※1、/etc/passwd文件是用户管理工作涉及的最重要的一个文件。 10 ※2、/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生。 11 ※3、用户组的所有信息都存放在/etc/group文件中。 11 四、赋予普通用户特殊权限 12 三、文件系统结构和基本文件处理 13 ※1.文件类型 13 ※2.文件系统结构 14 ※3.主目录和当前工作目录 14 ※4.路径、绝对路径和相对路径 15 ※5.查看当前目录pwd 15 ※6.浏览文件系统cd 15 ※7.创建和删除文件(touch和rm) 15 ※8.创建和删除目录(mkdir 和 rmdir) 16 ※9.查看目录内容和文件属性ls 17 ※10.确定文件类型file 18 ※11.文件的复制和移动(cp 和 mv) 18 ※12.查看文件内容cat、head、tail、more、less 19 ※13.统计文件大小wc 21 14./etc文件系统 22 15./dev文件系统 22 16./usr文件系统 23 17./var文件系统 23 18./proc文件系统 24 四、高级文件处理 24 ※1.文件比较diff 24 ※2.删除重复行uniq 25 3. 不唯一 26 4. 对特定域进行测试 26 ※5.文件排序sort 26 ※6.文件的查找find 30 ※1、使用name选项 31 ※2、用perm选项 31 ※3、忽略某个目录 31 ※4、使用user和nouser选项 31 ※5、使用group和nogroup选项 32 ※6、按照更改时间或访问时间等查找文件 32 ※7、查找比某个文件新或旧的文件 32 ※8、使用type选项 32 ※9、使用size选项 33 ※10、使用depth选项 33 ※11、使用混合查找方式查找文件 33 ※7.搜索文件内容grep 34 ※2. grep正则表达式元字符集(基本集) 34 ※8.cut and paste 35 ※9.文件合并jion 37 ※10.文件分割split 38 ※11.文件的压缩 38 ※1.gzip 、zcat命令 39 ※2.bzip2、bzcat 39 ※3.tar (打包文件或目录) 40 ※12.设备挂载mount 40 ※1.制作ISO文件 40 ※2.挂接移动硬盘 41 ※3.挂接U盘 42 五、文件安全与权限 42 ※1.文件安全策略 42 ※2.文件权限位 42 ※3.文件类型 43 ※4.改变权限chmod 43 ※4.1符号模式 43 ※4.2绝对模式 44 ※目录 44 ※5.chown和chgrp 44 ※6.umask 45 7.Set UID、Set GID、Sticky Bit 46 8.文件隐藏属性 47 9.lsattr(显示文件的隐藏属性)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是王久久阿

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值