在创建 Bash 脚本时,通常需要根据用户输入执行计算。 在本指南中,在使用 shell 脚本执行基本操作之前,首先让我们看一下解释和验证用户输入。 我们将使用集成的 Bash 读取命令来解释 Bash 用户输入。 读取命令通过用户获取一些值作为输入并将其分配给变量。 它通过 Bash 命令终端只读出一行。 在本指南中,您将学习如何解释来自终端和脚本的用户输入。
要实现读取命令,语法如下:
示例 01: 让我们举一个简单的例子,在出现提示时在 bash 中读取用户的输入。 打开终端并创建一个新文件“input.sh”。
打开文件并向其中添加一些代码,如下所示。 首先,echo 语句要求用户添加输入值。 读取语句用于输入用户值,该值将保存到变量“NAME”中。 最后一个 echo 语句用于打印输入值为“$NAME”变量的答案。
使用 bash 命令执行该文件。 首先,它会提示输入名称。 当用户输入值“Aqsa”时,它将打印包含其中值的消息。
示例 02: 打开旧文件并将以下代码写入其中。 我们可能正在使用集成读取命令; 给有查询的用户,使用那个 -p 选项。 您必须使用“readline”关键字 -e 来使用箭头键进行行编辑。 之后,使用该变量打印用户在命令 shell 中输入的文件的路径。
让我们在终端中使用 bash 命令检查这段代码的输出。 您会看到它将要求在 shell 中输入文件路径。 当你输入需要的值并回车时,它会打印出来。
如果你想建议一个答案,你必须在字符串后使用关键字“-i”,路径用引号括起来。
让我们使用 bash 命令检查更新代码的输出。 您会发现它会建议您一个文件路径,如下所示。
示例 03: 让我们来看另一个提示在 shell 中输入的示例。 在文件“input.sh”中写下以下代码。 我们有两个读取命令来添加用户在 shell 上的登录凭据。 关键字“-sp”用于在进入 shell 时隐藏凭证“Password”。
在执行时,您可以看到用户输入了其凭据,而密码在输入时是隐藏的。 最后,它显示了对用户表示感谢的消息。
示例 04: 我们还有另一个示例,从用户的 bash shell 中读取多个汽车名称作为值。 为此,我们需要三个变量“car1”、“car2”和“car3”。 我们有一个回声评论,要求提供汽车的名称。 读取命令用于读取用户在 shell 中输入的值(汽车名称)。 接下来的三个 echo 语句将连续打印带有汽车名称的消息。
使用 bash 命令,执行该文件。 它会询问您喜欢的汽车的名称。 当用户连续输入汽车名称时,它会将它们保存到一个读取命令的变量中,并使用接下来的三个回显语句将它们一一打印出来。
示例 05: 在上面的例子中,我们看到了如何提示用户输入,同时将输入保存到三个变量中。 在这个例子中,我们将学习如何使用关键字“-a”将用户输入的值作为数组成员读取到一个变量中。 因此,打开同一个文件并在其中写入以下代码。 echo 语句将要求您输入所需的输入。 读取语句有关键字“-a”,从用户那里获取多个值,并将它们保存到一个变量数组“NAMES”中。 在最后一个 echo 语句中,所有输入的值都打印为字符串文本中的数组成员。
在运行文件“input.sh”时,系统会提示用户输入值。 当用户输入值时,这些值已被保存到数组变量“NAMES”中。 保存这些值后,将执行 echo 语句并将输入的名称作为数组值打印出来,如图所示。
示例 06: 让我们在脚本中稍作改动的情况下使用相同的文件。 我们已经编写了两个读取命令来从用户那里获取值作为 shell 中的输入,并将它们保存在两个变量“NUM1”和“NUM2”中。 之后,两个变量都被打印出来了。
在命令终端中,写入chmod命令,为该文件赋予执行权限。
当您使用 bash 执行此文件时,您会看到它会提示您连续添加数字。 当您输入所需的值时,它将分别打印出两个数字。
如果您想验证用户是否将任何字段或变量留空,您可以更新之前的代码,如下所示。 关键字“-z”用于检查两个变量中是否有空格。
执行时,用户添加了空格作为数字。 用户收到重试消息,因为用户输入的变量有空格。
让我们在用户输入的数字的某些条件下尝试使用相同的代码。 如果用户输入的是下面代码中提到的字符以外的任何字符,它将传递一条消息。
在尝试此代码时,用户添加了一个特殊字符,这会生成一条提示消息。
结论 在本指南中,您已经成功地学习了如何在 shell 中提示用户输入并使用一些非常简单的示例解释用户输入。
来自 https://linuxhint.com/prompt-for-input-bash/
我有两段代码。 一个是 Applescript,另一个是 Bash shell 脚本。 shell脚本需要和applescript同时运行,返回一些值然后退出。 问题是 shell 脚本的 read -p
提示在使用 do shell script "/path/to/script.sh"
.
我想也许
display dialog "Query?" default answer ""
set T to text returned of result
可以替换 read -p
提示,但我无法弄清楚如何使这两种方式都起作用。 cam 如何使用这些方法中的任何一种来正确询问和等待用户输入?
我意识到我可以将 applescript 分成两部分,一部分放在 shell 脚本的开头,另一部分放在最后一个 shell 命令之后。
#!/bin/bash
osascript ~/Start_Script.scpt
echo 'enter some Text'
read -p "" T
osascript ~/End_Script.scpt
这就是我一直在做的,它确实有效。 但它需要使用适合我的终端。 但是,如果我想向像我妈妈这样的人展示……好吧,她不会打开终端应用程序。 因此,最好找到一种 read -p
在 Applescript 本身中模拟命令并能够将变量传递给嵌入式 shell 脚本的方法。
2016 年 5 月 27 日 8:49 问
I0_ol 701 2个 2个金徽章 9 9 银徽章 21 21个青铜徽章
嵌入到 shell 脚本中的 AppleScript 通常是杂乱无章、难以阅读且难以正确引用的。
我通过使用这种结构来解决这个问题。
#!/usr/bin/env bash
read -r -d '' applescriptCode <<'EOF'
set dialogText to text returned of (display dialog "Query?" default answer "" )
return dialogText
EOF
dialogText=$(osascript -e "$applescriptCode " );
echo $dialogText ;
我认为你需要的是:
set T to text returned of (display dialog "Query?" buttons {"Cancel" , "OK" } default button "OK" default answer "" )
如果您想从 bash 脚本执行此操作,则需要执行以下操作:
osascript -e 'set T to text returned of (display dialog "Query?" buttons {"Cancel", "OK"} default button "OK" default answer "")'
如果您需要,我可以更详细地解释它,但我认为它是不言自明的。
编辑: 如果您希望将结果作为 shell 变量,请执行以下操作:
SHELL_VAR=`osascript -e 'set T to text returned of (display dialog "Query?" buttons {"Cancel", "OK"} default button "OK" default answer "")' `
您在反引号 (` `) 之间键入的所有内容都会在主命令之前由 shell 评估(执行)。 有关详细信息, 请参阅 此答案。
我同意这有点“hacky”,而且我相信有更好的方法可以做到这一点,但这很有效。
2016 年 5 月 27 日 11:41 回复
炮手 535 1个 1 个金徽章 6个 6个银徽章 15 15个青铜徽章
这是一个稍微更简洁的例子:
PROMPT_RETURNED="$(osascript -e 'text returned of (display dialog "How many, eh?" default answer "" ) ')"
echo "$PROMPT_RETURNED "
您必须 登录 才能回答这个问题。 来自 https://apple.stackexchange.com/questions/239764/how-can-i-run-a-shell-script-that-prompts-for-user-input-from-within-applescript
#!/bin/bash
并使脚本可执行使用chmod +x script.sh
. 就是这样。