Linux输入重定向详解(附带实例)
输入重定向是指改变输出的方向,把命令的输入重定向到文件中。也就是说,输入重定向会改变输入的方向,不再使用键盘作为命令的输入,而是使用文件作为命令的输入。
【实例】 at 命令与输入重定向。
我们需要先简单地介绍一下 at 命令的作用和用法。at 可以使我们的命令在指定的时间运行,在默认情况下会以交互式的方式执行 at 命令,具体格式如下:
如果在安装操作系统时选择最小化安装,那么此时可能没有 at 命令,需要在配置 dnf 源后安装:
很明显,上面的 at 命令是以交互式的方式执行的。只要结合输入重定向就可以使 at 命令变为非交互式的方式执行,具体如下:
【实例】EOF 与输入重定向。
在 shell 脚本中,EOF 与 echo 类似,可以将指定字符串输出到屏幕中显示。在使用 EOF 过程中,不可避免地需要使用输入重定向。
接下来我们学习使用命令行中 EOF 的用法,然后逐步将其应用在脚本当中。
输出 abcd 这四个字符,我们在输出过程中要试着看懂 EOF 的输出格式,具体如下:
首先,键盘中输入 cat << EOF,然后按 Enter 键即可进入下一个命令行;其次,新命令行中以“>”为命令提示符,直接输入 abcd,并按 Enter 键表示当前行输入完成;最后,在新的一行中输入 EOF,表示输入完成。最终,我们看到命令行中输出了 abcd 字符串。
我们尝试使用 EOF 进行多行输出,具体如下:
可以看到,对于 EOF 输出字符串来说,调整格式(如换行、按 Tab 键等)更加简单。
【实例】 at 命令与输入重定向。
我们需要先简单地介绍一下 at 命令的作用和用法。at 可以使我们的命令在指定的时间运行,在默认情况下会以交互式的方式执行 at 命令,具体格式如下:
[root@localhost~]# at <命令执行时间> #在加入命令执行时间后会以交互式的方式输入命令
如果在安装操作系统时选择最小化安装,那么此时可能没有 at 命令,需要在配置 dnf 源后安装:
[root@localhost~]# dnf -y install at #在dnf源配置正确的情况下安装at命令 [root@localhost~]# systemctl start atd #启动atd服务,安装at命令后需要启动atd服务才能正常使用 [root@localhost~]# at 12:26 #在命令行中输入at后,输入想要执行命令的时间 warning: commands will be executed using /bin/sh #警告,将使用/bin/sh运行命令,在当前系统中/bin/sh作为符号链接指向到/bin/bash at> touch /root/test.at #以交互式的方式继续输入想要在12:26执行的命令 at> <EOT> #按Enter键换行后,使用快捷键Ctrl+D表示输入完成 job 1 at Thu Dec 26 12:26:00 2023 #at任务编号为1,在2023年12月26日的12时26分执行
很明显,上面的 at 命令是以交互式的方式执行的。只要结合输入重定向就可以使 at 命令变为非交互式的方式执行,具体如下:
[root@localhost~]# echo "mkdir -p /a/b/c" >> /root/at.exec #首先将要执行的命令写入文件 [root@localhost~]# cat /root/at.exec mkdir -p /a/b/c #查看命令写入后的文件 [root@localhost~]# at 12:30 < /root/at.exec #指定at命令执行时间,并以输入重定向的方式将文件/root/at.exec中的命令交给at执行 warning: commands will be executed using /bin/sh job 2 at Thu Dec 26 12:30:00 2023 #at任务编号为2,在2023年11月2日的12时30分执行借助输入重定向,将 /root/at.exec 文件中的命令交给 at 命令执行,实现了非交互式执行 at 命令。
【实例】EOF 与输入重定向。
在 shell 脚本中,EOF 与 echo 类似,可以将指定字符串输出到屏幕中显示。在使用 EOF 过程中,不可避免地需要使用输入重定向。
接下来我们学习使用命令行中 EOF 的用法,然后逐步将其应用在脚本当中。
输出 abcd 这四个字符,我们在输出过程中要试着看懂 EOF 的输出格式,具体如下:
[root@localhost~]# cat << EOF > abcd > 输入 abcd 字符串 > EOF abcd #执行后输出 abcd 字符串
首先,键盘中输入 cat << EOF,然后按 Enter 键即可进入下一个命令行;其次,新命令行中以“>”为命令提示符,直接输入 abcd,并按 Enter 键表示当前行输入完成;最后,在新的一行中输入 EOF,表示输入完成。最终,我们看到命令行中输出了 abcd 字符串。
我们尝试使用 EOF 进行多行输出,具体如下:
[root@localhost~]# cat << EOF > 1.linux > 2.apache > 3.mysql > 4.php > EOF 1.linux 2.apache 3.mysql 4.php #加粗字体为输出结果在上述案例中,我们进行了多行字符串的输出。还是先使用 cat<<EOF 进入新行,输入“1.linux”之后,直接按 Enter 键表示当前行输入完成,进入新行后输入“2.apache”,输入完成后再次按 Enter 键进入下一行,以此类推。输入完所有字符串后,最后一个新行输入 EOF 表示输入完成。
可以看到,对于 EOF 输出字符串来说,调整格式(如换行、按 Tab 键等)更加简单。