Menu
CoddyTech

脚本中的用户输入

本课属于 Coddy Terminal 学习旅程的“基础知识”单元。第 69 课,共 82 课。

变量很有用,但有时你会希望脚本在运行时向用户询问信息。read 命令会暂停脚本,等待用户输入内容,然后将输入内容存储到变量中。

它的工作原理如下:

#!/bin/bash
echo "What is your name?"
read name
echo "Hello, $name!"

运行这个脚本时,它会打印出问题,等待用户输入姓名并按 Enter 键,然后向用户问好。read 命令会获取用户输入的内容,并将其存储在变量 name 中。

你可以使用 -p 标志让提示更简洁,它会将提示消息和输入放在同一行:

#!/bin/bash
read -p "Enter your name: " name
echo "Hello, $name!"

这会显示 Enter your name: ,并在同一行等待输入,看起来更整洁。-p 标志以提示文本作为参数,后面跟着用于存储输入的变量名。

用户输入让脚本具有交互性和适应性。你无需将值硬编码,而是可以编写一个脚本,让它根据用户每次运行时提供的内容以不同的方式工作。

challenge icon

挑战

简单

创建一个名为 greeter.sh 的 shell 脚本,询问用户最喜欢的颜色,然后使用用户输入显示一条消息。

你的脚本应该:

  1. 以 shebang 行(#!/bin/bash)开头
  2. 使用带有 -p 标志的 read 提示:What is your favorite color?
  3. 将输入存储在名为 color 的变量中
  4. 使用 echo 输出:Nice! [color] is a great color!(其中 [color] 是用户的输入)

让脚本可执行,然后以 blue 作为输入运行它。这个终端不是交互式的,无法停下来等你输入,因此要用管道把答案传给脚本:

echo "blue" | ./greeter.sh

输出应该是:

Nice! blue is a great color!

注意:此处不会显示 What is your favorite color? 提示。read -p 只会在输入来自键盘时显示提示,而这里的输入来自管道。

你写的每一行都要用单引号括起来:echo 'echo "Hello $name"' >> script.sh。写入文件时,单引号可以阻止 shell 替换 $name,因此脚本会保留这个变量,并在运行时展开它。使用双引号则会立即替换变量值。

提示:使用带重定向的 echo,逐行构建脚本。使用 read -p "What is your favorite color? " color 提示并获取输入,然后使用 echo "Nice! $color is a great color!" 显示结果。

亲手试试

终端
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基础知识中的所有课

自己练习: Terminal 在线编辑器