脚本中的用户输入
本课属于 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 标志以提示文本作为参数,后面跟着用于存储输入的变量名。
用户输入让脚本具有交互性和适应性。你无需将值硬编码,而是可以编写一个脚本,让它根据用户每次运行时提供的内容以不同的方式工作。
挑战
简单创建一个名为 greeter.sh 的 shell 脚本,询问用户最喜欢的颜色,然后使用用户输入显示一条消息。
你的脚本应该:
- 以 shebang 行(
#!/bin/bash)开头 - 使用带有
-p标志的read提示:What is your favorite color? - 将输入存储在名为
color的变量中 - 使用
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!"显示结果。
亲手试试
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
基础知识中的所有课
自己练习: Terminal 在线编辑器