在 Bash 中读取文件或用户输入
BASH 是 Bourne Again Shell 的简写,这是一个智能名称,指的是 Bourne Shell(即由 Steven Bourne 创建)。BASH 是由 Brian Fox 开发的一个 shell 程序,是 Bourne Shell 应用程序 sh
的更新版本。
本文将讨论 bash 脚本中的输入功能以及从标准输入控制台和一些特定文件获取输入的方法。此外,我们还将通过多个示例脚本来说明这个想法。
BASH 脚本
包含我们通常会在命令行中输入的指令列表的纯文本文件称为 Bash Shell 脚本。当要重复执行一系列任务时,Bash 特别有用。
无需每次都输入相同序列的指令手册,只需执行一个预先编写的 Bash 脚本文件即可。因此,这节省了大量的人工工作,也节省了时间。
Bash 脚本的另一个优点是它的命令式编程特性。这意味着它允许编写程序、条件语句和循环结构,如编程语言(例如,C/C++、Javascript 等)。
Bash 脚本是一个带有 .sh
扩展名的文本文件。为了创建它,我们使用扩展名为 .sh
的 touch
命令。
touch myscript.sh
我们可以在任何文本编辑器中打开它,例如 gedit
。要打开它,请使用以下命令。
命令:
gedit myscipt.sh
我们使用 #!/bin/bash
行来启动一个 shell 脚本。在这一行 #!
一部分称为 shebang
,其余部分是操作系统中 bash 解释器的路径。
之后,我们将在脚本中编写所需的命令集并保存。要运行 Bash 脚本,我们使用命令 bash
。
命令:
bash myscript.sh
这将运行我们的脚本并为我们提供脚本中使用的命令的输出。
从 Bash 脚本中的 stdin
输入
我们还可以从终端或 Bash 脚本中的 stdin
获取用户输入。我们可以使用内置的 Bash 命令 read
来读取 Bash 用户输入。
它接受用户的输入并将其分配给一个变量。它只能从 Bash shell 中读取一行。
语法:
read <variable>
每个以空格分隔的单词都保存在不同的变量中。
Bash 脚本示例:
#!/bin/bash
echo "Enter your name: "
read userName
echo "Enter your age: "
read userAge;
echo "Enter your 3 Subjects: "
read sub1 sub2 sub3
echo "The user $userName is $userAge years old and is specialized in $sub1, $sub2, and $sub3. "
在此示例中,我们从用户那里获取了他的姓名、年龄和 3 个主题的输入。主题保存在单独的变量中。
输出:
使用 read
命令提供变量名称不是强制性的。如果我们不指定变量名,它默认将值存储在 REPLY
变量中,以便我们稍后在脚本中使用它。
Bash 脚本示例:
#!/bin/bash
echo "Enter a number from 1-10: "
read
echo "You entered: $REPLY"
输出:
在前面的示例中,我们使用了 2 行来获取输入,一行用于提示语句,另一行用于读取命令。这个过程也可以使用带有 read
命令的标志 -p
在单行中执行。
语法:
read -p <Prompt statement> <variable_name>
Bash 脚本示例:
#!/bin/bash
read -p "Please enter the name of the file: " fileName
echo "The filename you entered is: $fileName"
输出:
在某些情况下,出于安全和隐私方面的考虑,我们需要从屏幕上隐藏用户输入。例如,当我们需要输入密码时,当用户输入密码时,它不应该在屏幕上可见。
为了实现它,我们使用标志 -s
来使其静默。
Bash 脚本示例:
#!/bin/bash
read -p "Enter username: " userName
read -sp "Enter Password: " pass
echo
echo "Hello $userName"
输出:
我们还可以使用 -a
标志将输入输入到数组中。使用此标志,一行中的所有单词都将存储在数组的不同索引中,以便以后访问。
Bash 脚本示例:
#!/bin/bash
echo "Enter names of 2 students: "
read -a stuNames
echo "The names of students are:${stuNames[0]}, ${stuNames[1]} "
输出:
Bash 文件输入
Bash 脚本也可以从文件中获取输入。read
命令用于此目的并逐行读取文件。我们将讨论一些从文件中读取数据的示例。
我们可以使用控制台和脚本来读取文件。首先,我们查看控制台命令,然后转向脚本。
假设我们有一个文件 data.txt
,其中包含一些文本,如下所示:
LG
Samsung
Bosch
Pel
读取此文件的命令:
while read ln; do echo $ln; done < data.txt
输出:
我们还可以使用脚本从文件中读取。
Bash 脚本示例:
#!/bin/bash
fname='data.txt'
a=1
while read ln; do
echo "Reading line $a : $ln"
a=$((a+1))
done < $fname
输出:
我们也可以从命令行读取文件名。创建一个 bash 文件并将下面的脚本放入其中。
文件名将从该脚本的命令行输入中获取。变量 $1
将保存文件名以供读取,读取第一个参数值。
如果文件存在于当前位置,while 循环将逐行读取文件并打印内容,就像前面的示例一样。
Bash 脚本示例:
#!/bin/bash
fname=$1
while read ln; do
echo $ln
done < $fname
要运行此脚本,我们将使用以下命令。
命令:
$ bash myscript.sh data.txt
输出:
相关文章
如何在 CentOS 中获取 IP 地址
发布时间:2023/05/04 浏览次数:108 分类:操作系统
-
这篇简短的文章是对 CentOS 的一个简短介绍,然后简要讨论了我们如何使用命令行界面 (CLI) 在 CentOS 中获取服务器 IP 地址。
在 Linux 中更新 YUM
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。
在 Linux 中安装 Deb 文件
发布时间:2023/05/04 浏览次数:130 分类:操作系统
-
本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。
Linux 中的 lsof 命令
发布时间:2023/05/04 浏览次数:82 分类:操作系统
-
在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。
Linux 解决不能执行二进制文件问题
发布时间:2023/05/04 浏览次数:187 分类:操作系统
-
在本文中,我们将学习如何在 Linux 中执行二进制文件。 如果 Linux 无法执行二进制文件,我们还将学习如何解决错误。
Linux 中错误 Mesg: Ttyname Failed: Inappropriate Ioctl for Device Error
发布时间:2023/05/04 浏览次数:145 分类:操作系统
-
本文介绍如何在 Linux 中解决 mesg: ttyname failed: inappropriate ioctl for device 错误。在 Linux 中,这个错误是由于默认的 vagrant 配置 config.ssh.shell 与 bash -l 交互导致的。
Linux 中的 ps aux 命令
发布时间:2023/05/04 浏览次数:69 分类:操作系统
-
本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。
Linux 中的 NTP
发布时间:2023/05/04 浏览次数:137 分类:操作系统
-
本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。
在 Bash 中创建进度条
发布时间:2023/05/04 浏览次数:164 分类:操作系统
-
这是有关在 Bash 中创建进度条以显示正在运行的命令或进程的进度的指南。本文将探讨在 Bash(Linux 和 macOS 的默认 shell)中向 shell 脚本添加进度条的几种方法。使用 pv 命令在 Bash 中创建进度条