侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux read命令教程:如何从标准输入或文件描述符中读取值并赋给变量

Linux read命令是一个内置命令,用于从标准输入或文件描述符中读取一行或多个值,并将它们赋给变量。read命令可以让你的bash脚本具有交互性,接受用户的输入并根据输入执行相应的操作。本文将介绍Linux read命令的基本用法和常见示例,帮助你掌握这个强大的命令。

适用的Linux版本

Linux read命令是bash shell的一个内置命令,因此它适用于所有使用bash作为默认shell的Linux发行版,如Ubuntu, Debian, Fedora, CentOS等。如果你使用的是其他类型的shell,如zsh, csh, ksh等,你可能需要安装或切换到bash才能使用read命令。你可以使用以下命令来检查你当前使用的shell类型:

echo $SHELL

如果输出是/bin/bash,则说明你已经在使用bash shell。如果不是,你可以使用以下命令来安装bash(以Ubuntu为例):

sudo apt update
sudo apt install bash

安装完成后,你可以使用以下命令来切换到bash shell:

bash

或者,你可以修改你的用户账户的默认shell为bash,使用以下命令(需要输入你的密码):

chsh -s /bin/bash

然后重新登录或重启终端,就可以使用bash shell了。

Linux read命令的基本语法

Linux read命令的基本语法如下:

read [options] [variable...]

其中,options是可选的参数,用于指定read命令的行为和功能。variable是一个或多个变量名,用于存储从标准输入或文件描述符中读取的值。如果没有指定变量名,则默认使用REPLY变量。

Linux read命令的常用选项说明

Linux read命令有很多选项,可以根据不同的需求来调整read命令的行为和功能。下表列出了一些常用的选项及其说明:

选项说明
-a array将读取的值赋给数组array,而不是单个变量
-d delimiter使用delimiter作为输入结束符,而不是换行符
-e在读取输入时启用readline库,允许使用快捷键和历史记录
-i text在读取输入之前,在输入缓冲区中显示text作为默认值
-n nchars限制读取输入的字符数为nchars
-N nchars读取恰好nchars个字符,即使遇到换行符或结束符
-p prompt在读取输入之前,在标准错误输出中显示prompt作为提示信息
-r不将反斜杠字符视为转义字符
-s使输入对用户不可见,通常用于输入密码等敏感信息
-t timeout设置读取输入的超时时间为timeout秒
-u fd从文件描述符fd中读取输入,而不是标准输入

Linux read命令的实例

下面给出一些Linux read命令的实例,以帮助你更好地理解和使用这个命令。

实例1:简单地读取用户输入并显示

[linux@bashcommandnotfound.cn ~]$ read name
Abby
[linux@bashcommandnotfound.cn ~]$ echo "Hello, $name"
Hello, Abby

这个示例中,我们没有指定任何选项或变量名,所以read命令会等待用户输入一行文本,并将其赋给默认变量REPLY。然后我们使用echo命令来显示用户输入的值。

实例2:使用-p选项显示提示信息

[linux@bashcommandnotfound.cn ~]$ read -p "Enter your name: " name
Enter your name: Abby
[linux@bashcommandnotfound.cn ~]$ echo "Hello, $name"
Hello, Abby

这个示例中,我们使用了-p选项来显示一个提示信息,让用户知道需要输入什么。我们还指定了一个变量名name来存储用户输入的值。

实例3:使用-n选项限制输入的字符数

[linux@bashcommandnotfound.cn ~]$ read -n 1 -p "Do you want to continue [Y/N]? " answer
Do you want to continue [Y/N]? Y
[linux@bashcommandnotfound.cn ~]$ echo
[linux@bashcommandnotfound.cn ~]$ echo $answer
Y

这个示例中,我们使用了-n选项来限制用户只能输入一个字符,然后read命令就会立即返回,而不需要按回车键。我们还使用了-p选项来显示一个提示信息,让用户选择是否继续。注意,我们在read命令之后使用了一个空的echo命令,是为了换行,否则后面的命令会和提示信息连在一起。

实例4:使用-s选项隐藏输入的内容

[linux@bashcommandnotfound.cn ~]$ read -s -p "Enter your password: " password
Enter your password:
[linux@bashcommandnotfound.cn ~]$ echo
[linux@bashcommandnotfound.cn ~]$ echo $password
123456

这个示例中,我们使用了-s选项来隐藏用户输入的内容,通常用于输入密码等敏感信息。我们还使用了-p选项来显示一个提示信息,让用户输入密码。同样地,我们在read命令之后使用了一个空的echo命令,是为了换行。

实例5:使用-d选项指定输入结束符

[linux@bashcommandnotfound.cn ~]$ read -d ":" -p "Enter a word ending with colon: " word
Enter a word ending with colon: hello:
[linux@bashcommandnotfound.cn ~]$ echo $word
hello

这个示例中,我们使用了-d选项来指定冒号作为输入结束符,而不是换行符。这意味着当用户输入一个冒号时,read命令就会停止读取输入,并将冒号之前的内容赋给变量word。我们还使用了-p选项来显示一个提示信息,让用户输入一个以冒号结尾的单词。

实例6:使用-e选项启用readline库

[linux@bashcommandnotfound.cn ~]$ read -e -p "Enter a command: " command
Enter a command: ls -l /etc/p<TAB>
Enter a command: ls -l /etc/passwd

这个示例中,我们使用了-e选项来启用readline库,在读取输入时可以使用快捷键和历史记录。例如,在这个示例中,我们可以使用Tab键来自动补全文件名,或者使用上下箭头键来浏览之前输入的命令。我们还使用了-p选项来显示一个提示信息,让用户输入一个命令。

实例7:使用-i选项显示默认值

[linux@bashcommandnotfound.cn ~]$ read -i "Linux" -p "Enter your favorite OS: " os
Enter your favorite OS: Linux
[linux@bashcommandnotfound.cn ~]$ echo $os
Linux

这个示例中,我们使用了-i选项来显示一个默认值,在读取输入之前,在输入缓冲区中显示Linux作为默认值。用户可以直接按回车键接受默认值,也可以修改或删除默认值。我们还使用了-p选项来显示一个提示信息,让用户输入他们最喜欢的操作系统。

实例8:使用-t选项设置超时时间

[linux@bashcommandnotfound.cn ~]$ read -t 5 -p "Enter your name: " name
Enter your name:
[linux@bashcommandnotfound.cn ~]$ echo $?
142

这个示例中,我们使用了-t选项来设置读取输入的超时时间为5秒,如果用户在5秒内没有输入任何内容,read命令就会返回一个非零的退出状态码,表示超时。我们还使用了-p选项来显示一个提示信息,让用户输入他们的名字。我们可以使用echo $?命令来查看read命令的退出状态码,如果是0表示成功,如果是142表示超时。

实例9:使用-a选项将输入赋给数组

[linux@bashcommandnotfound.cn ~]$ read -a colors -p "Enter three colors: " 
Enter three colors: red green blue
[linux@bashcommandnotfound.cn ~]$ echo ${colors[0]}
red
[linux@bashcommandnotfound.cn ~]$ echo ${colors[1]}
green
[linux@bashcommandnotfound.cn ~]$ echo ${colors[2]}
blue

这个示例中,我们使用了-a选项来将用户输入的值赋给一个数组colors,而不是单个变量。我们还使用了-p选项来显示一个提示信息,让用户输入三种颜色。然后我们可以使用${colors[index]}的语法来访问数组中的元素,其中index是从0开始的下标。

实例10:使用-r选项不转义反斜杠字符

[linux@bashcommandnotfound.cn ~]$ read -p "Enter a string with backslashes: " str1
Enter a string with backslashes: hello\world
[linux@bashcommandnotfound.cn ~]$ echo $str1
helloworld
[linux@bashcommandnotfound.cn ~]$ read -r -p "Enter a string with backslashes: " str2
Enter a string with backslashes: hello\world
[linux@bashcommandnotfound.cn ~]$ echo $str2
hello\world

这个示例中,我们分别使用了没有-r选项和有-r选项的read命令来读取用户输入的字符串,并将其赋给变量str1str2。我们可以看到,没有-r选项的read命令会将反斜杠字符\视为转义字符,因此在输出时会忽略它。而有-r选项的read命令则不会转义反斜杠字符\,因此在输出时会保留它。

Linux read命令的快捷键

当我们使用-e选项启用readline库时,在读取输入时可以使用一些快捷键来方便地编辑和操作输入内容。下表列出了一些常用的快捷键及其功能:

快捷键功能
Ctrl+A将光标移动到行首
Ctrl+E将光标移动到行尾
Ctrl+U删除光标之前的所有内容
Ctrl+K删除光标之后的所有内容
Ctrl+W删除光标之前的一个单词
Ctrl+Y粘贴最近删除的内容
Ctrl+L清除屏幕并重新显示当前行
Ctrl+C取消当前行并返回一个非零的退出状态码
Tab自动补全文件名或目录名
上/下箭头键浏览之前输入的命令

Linux read命令的注意事项

  • Linux read命令只能从标准输入或文件描述符中读取一行或多个值,如果需要从文件中读取多行或整个文件,可以使用while循环或cat命令配合read命令来实现。
  • Linux read命令默认以空格或制表符作为分隔符,将一行输入分割成多个值,并按顺序赋给指定的变量。如果指定的变量数少于输入值的个数,则多余的值都会赋给最后一个变量。如果指定的变量数多于输入值的个数,则没有对应值的变量会被赋为空值。
  • Linux read命令默认以换行符作为输入结束符,如果需要指定其他字符作为结束符,可以使用-d选项。如果输入的内容中包含结束符,read命令会忽略结束符之后的内容,并将结束符之前的内容赋给变量。
  • Linux read命令默认会将反斜杠字符\视为转义字符,如果需要保留反斜杠字符,可以使用-r选项。如果输入的内容中包含换行符\n,read命令会将其视为继续输入的标志,而不是结束输入的标志。如果需要以换行符作为结束输入的标志,可以使用-r选项。
0

评论区