简介
本实验将向你介绍在 Linux shell 脚本中读取输入的方法。读取输入是创建能够响应用户输入的交互式 shell 脚本的一项基本技能。通过学习如何使用 read
命令,你将能够收集和处理用户输入的数据,使你的脚本更加通用和用户友好。
在本实验中,你将学习如何读取用户输入,在脚本中处理这些输入,并创建能够根据不同用户输入动态响应的交互式 shell 脚本。这些技能对于在 Linux 环境中编写有效的命令行工具和脚本至关重要。
本实验将向你介绍在 Linux shell 脚本中读取输入的方法。读取输入是创建能够响应用户输入的交互式 shell 脚本的一项基本技能。通过学习如何使用 read
命令,你将能够收集和处理用户输入的数据,使你的脚本更加通用和用户友好。
在本实验中,你将学习如何读取用户输入,在脚本中处理这些输入,并创建能够根据不同用户输入动态响应的交互式 shell 脚本。这些技能对于在 Linux 环境中编写有效的命令行工具和脚本至关重要。
read
命令是一个内置的 shell 命令,用于从标准输入(通常是键盘)读取一行输入,并将其赋值给变量。这使得脚本能够接收和处理用户输入。
在这一步中,你将创建一个简单的脚本,该脚本读取用户输入并将其显示给用户。
首先,确保你位于项目目录中:
cd /home/labex/project
创建一个名为 input_reader.sh
的新脚本文件:
touch input_reader.sh
使脚本可执行:
chmod +x input_reader.sh
使用 nano 文本编辑器打开脚本文件:
nano input_reader.sh
在脚本中添加以下代码:
#!/bin/bash
## A simple script to demonstrate basic input reading
echo "Please enter your name:"
read name
echo "Hello, $name! Welcome to Linux input reading."
此脚本:
#!/bin/bash
) 开头,指定脚本应使用 bash 运行read
命令捕获用户输入的内容,并将其存储在名为 name
的变量中按 Ctrl+O
保存文件,然后按 Enter
确认文件名,再按 Ctrl+X
退出 nano。
运行脚本进行测试:
./input_reader.sh
你应该会看到类似以下的输出:
Please enter your name:
John
Hello, John! Welcome to Linux input reading.
实际输出将显示你输入的任何姓名,而不是 "John"。
read
命令会等待用户输入,并将其存储在一个或多个变量中。在这个例子中,输入被存储在一个名为 name
的单个变量中。稍后,你将学习如何使用单个 read
命令捕获多个输入。
在这一步中,你将改进你的脚本,使其使用循环持续读取输入,直到满足特定的退出条件。这种模式常用于需要从用户那里收集多条信息的交互式脚本中。
打开你的脚本进行编辑:
nano input_reader.sh
将现有内容替换为以下代码:
#!/bin/bash
## Enhanced script with a loop for multiple inputs
echo "Enter multiple inputs (type 'exit' to quit):"
while true; do
## Prompt for input
echo -n "> "
read input
## Check if user wants to exit
if [[ "$input" == "exit" ]]; then
echo "Exiting the input reader."
break
fi
## Process the input
echo "You entered: $input"
done
echo "Thank you for using the input reader!"
此脚本:
while true
循环创建一个无限循环,持续接受输入echo -n
在每次输入前显示一个提示符 (>
),echo -n
可防止换行input
变量中按 Ctrl+O
保存文件,然后按 Enter
确认文件名,再按 Ctrl+X
退出 nano。
运行改进后的脚本:
./input_reader.sh
你应该会看到类似以下的输出:
Enter multiple inputs (type 'exit' to quit):
> hello
You entered: hello
> world
You entered: world
> exit
Exiting the input reader.
Thank you for using the input reader!
这种循环结构在你需要按顺序处理多个输入时特别有用,比如构建一个简单的命令行界面或数据录入工具。当用户输入 "exit" 时,break
语句用于退出循环,但你可以根据需要修改退出条件。
在这一步中,你将学习如何为输入提供默认值,并使用 -p
选项创建更简洁的提示信息。当你希望让用户可以直接按回车键接受建议值时,这非常有用。
打开你的脚本进行编辑:
nano input_reader.sh
将现有内容替换为以下代码:
#!/bin/bash
## Script demonstrating read with default values
## Using -p flag for prompt and providing default with || operator
read -p "Enter your country (default: USA): " country
country=${country:-USA}
echo "Country set to: $country"
## Another example with a default value
read -p "Enter your preferred programming language (default: Bash): " language
language=${language:-Bash}
echo "Programming language set to: $language"
## Combining with a timeout using -t option
echo "Quick response needed:"
read -t 5 -p "What is your favorite color? (You have 5 seconds, default: Blue): " color
color=${color:-Blue}
echo "Favorite color set to: $color"
此脚本:
-p
标志在同一个 read
命令中显示提示信息,使代码更简洁${variable:-default}
语法,在用户输入为空时设置默认值-t
选项,该选项为输入设置了超时时间(在这个例子中是 5 秒)按 Ctrl+O
保存文件,然后按 Enter
确认文件名,再按 Ctrl+X
退出 nano。
运行脚本进行测试:
./input_reader.sh
尝试以下几种情况:
接受默认值时的示例输出如下:
Enter your country (default: USA):
Country set to: USA
Enter your preferred programming language (default: Bash):
Programming language set to: Bash
Quick response needed:
What is your favorite color? (You have 5 seconds, default: Blue):
Favorite color set to: Blue
read
命令的 -p
选项允许你在同一个命令中提供提示信息,使你的脚本更简洁、易读。${variable:-default}
语法是 shell 的一个强大特性,当变量未设置或为空时,它会用默认值进行替换,这非常适合在脚本中提供默认选项。
在这最后一步中,你将学习另外两种高级技巧:
读取安全输入(如密码),且不在屏幕上显示输入的字符
使用单个 read
命令读取多个变量
打开你的脚本进行编辑:
nano input_reader.sh
将现有内容替换为以下代码:
#!/bin/bash
## Script demonstrating secure input and multiple variable reading
## Secure input reading with -s flag (no echo)
echo "Secure Input Example:"
read -p "Username: " username
read -s -p "Password: " password
echo ## Add a newline after password input
echo "Username entered: $username"
echo "Password length: ${#password} characters"
## Reading multiple variables at once
echo -e "\nMultiple Variable Example:"
read -p "Enter first name, last name, and age (separated by spaces): " first_name last_name age
echo "First name: $first_name"
echo "Last name: $last_name"
echo "Age: $age"
## Reading with a custom delimiter
echo -e "\nCustom Delimiter Example:"
read -p "Enter comma-separated values: " -d "," value1
echo ## Add a newline
echo "First value before comma: $value1"
echo -e "\nThank you for completing this lab on Linux input reading!"
此脚本:
read
命令中使用 -s
标志来隐藏输入内容(适用于密码或其他敏感信息)read
命令中提供多个变量名,从一行输入中读取多个变量-d
标志指定自定义分隔符(而非默认的换行符)按 Ctrl+O
保存文件,然后按 Enter
确认文件名,再按 Ctrl+X
退出 nano。
运行脚本进行测试:
./input_reader.sh
示例输出(你的输入会有所不同):
Secure Input Example:
Username: john_doe
Password:
Username entered: john_doe
Password length: 8 characters
Multiple Variable Example:
Enter first name, last name, and age (separated by spaces): John Doe 30
First name: John
Last name: Doe
Age: 30
Custom Delimiter Example:
Enter comma-separated values: test,
First value before comma: test
Thank you for completing this lab on Linux input reading!
在处理密码等敏感信息时,安全性至关重要。-s
标志可确保输入的字符不会显示在屏幕上。注意在密码示例中,脚本仅显示密码的长度用于验证,而不显示实际的密码。
一次性读取多个变量可以使你的脚本更高效、更用户友好。当 read
命令接收到多个变量名时,它会根据 IFS(内部字段分隔符)环境变量对输入进行分割,该变量默认以空白字符(空格、制表符和换行符)作为分隔符。
-d
标志允许你更改表示输入结束的分隔符。默认情况下,read
命令在遇到换行符(即你按下回车键)时停止读取,但你可以将其更改为任何字符,如示例中的逗号。
在这个实验中,你学习了在 Linux bash 脚本中读取和处理用户输入的关键技术:
read
命令将用户输入捕获到变量中。这些输入读取技能是创建交互式 shell 脚本的基础,这些脚本能够适应用户输入、提供合适的默认值,并处理各种类型的数据。现在,你可以运用这些技术来创建更具响应性和用户友好性的命令行工具和脚本。
随着你继续提升 Linux 技能,可以考虑将这些输入读取方法与其他 bash 特性(如条件语句、函数和文件操作)相结合,以创建更复杂、强大的自动化和系统管理工具。