| 会员登录 立即注册

打印 上一主题 下一主题

软件开发 | Bash 基础知识系列 #3:传递参数和接受用户输入

[复制链接]
跳转到指定楼层
楼主
3AAA 发表于 2023-7-29 00:07:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
楼主
3AAA
2023-7-29 00:07:39 2869 1 看楼主


在 Bash 基础系列的这一章中,学习如何向 Bash 脚本传递参数并使它们具有交互性。

来让 Bash 脚本有参数吧 ?

你可以通过向 Bash 脚本传递变量来使其更加有用和更具交互性。

让我通过示例详细向你展示这一点。

将参数传递给 Shell 脚本


当你运行 Shell 脚本时,你可以按以下方式向其中添加其他变量:
./my_script.sh var1 var2
在脚本内部,你可以使用 $1作为第一个参数,$2作为第二个参数,依此类推。

? $0是一个特殊变量,保存正在执行的脚本的名称。

让我们通过一个实际的例子来看看。切换到保存练习 Bash 脚本的目录。
mkdir -p bash_scripts && cd bash_scripts
现在,创建一个名为 arguments.sh(我想不出更好的名称)的新 Shell 脚本,并向其中添加以下行:
#!/bin/bashecho "Script name is: $0"echo "First argument is: $1"echo "Second argument is: $2"
保存文件并使其可执行。现在像往常一样运行脚本,但这次向其中添加任意两个字符串。你将看到屏幕上打印的详细信息。

? 参数由空格(空格、制表符)分隔。如果参数中有空格,请使用(英文)双引号将其引起来,否则它将被视为单独的参数。



? Bash 脚本最多支持 255 个参数。但对于参数 10 及以上,你必须使用花括号 ${10}、${11}...${n}。

正如你所看到的,$0代表脚本名称,而其余参数存储在编号变量中。你还可以在脚本中使用一些其他特殊变量。
特殊变量变量描述
$0脚本名称
$1、$2、……$9脚本参数
${n}脚本参数从 10 到 255
$#参数数量
$@所有参数
$$当前 Shell 的进程 ID
$!最后执行的命令的进程 ID
$?最后执行命令的退出状态

???♀? 修改上面的脚本以显示参数数量。


如果参数数量不匹配怎么办?


在上面的示例中,你为 Bash 脚本提供了两个参数并在脚本中使用了它们。

但是,如果你只提供一个参数或三个参数怎么办?

让我们实际做一下吧。



正如你在上面所看到的,当你提供的参数超出预期时,结果仍然是一样的。不使用其他参数,因此不会产生问题。

但是,当你提供的参数少于预期时,脚本将显示空白。如果脚本的一部分依赖于缺少的参数,这可能会出现问题。

接受用户输入并制作交互式 Bash 脚本


你还可以创建提示用户通过键盘提供输入的 Bash 脚本。这使你的脚本具有交互性。

read命令提供了此功能。你可以这样使用它:
echo "Enter something"read var
上面的 echo命令不是必需的,但最终用户不会知道他们必须提供输入。然后用户在按回车键之前输入的所有内容都存储在var变量中。

你还可以显示提示消息并在单行中获取值,如下所示:
read -p "Enter something? " var
让我们看看它的实际效果。创建一个新的 interactive.shShell 脚本,内容如下:
#!/bin/bashecho "What is your name, stranger?"read nameread -p "What's your full name, $name? " full_nameecho "Welcome, $full_name"
在上面的示例中,我使用 name变量来获取名称。然后我在提示中使用name变量,并在full_name变量中获取用户输入。我使用了两种使用read命令的方法。

现在,如果你授予执行权限,然后运行此脚本,你会注意到该脚本显示 What is your name, stranger?,然后等待你从键盘输入内容。你提供输入,然后它会显示What's your full name消息,并再次等待输入。

以下是供你参考的示例输出:



?? 练习时间


是时候练习你所学到的东西了。尝试为以下场景编写简单的 Bash 脚本。

练习 1:编写一个带有三个参数的脚本。你必须使脚本以相反的顺序显示参数。

预期输出:
abhishek@itsfoss:~/bash_scripts$ ./reverse.sh ubuntu fedora archArguments in reverse order:arch fedora ubuntu
练习 2:编写一个脚本,显示传递给它的参数数量。

提示:使用特殊变量 $#。

预期输出:
abhishek@itsfoss:~/bash_scripts$ ./arguments.sh one and two and threeTotal number of arguments: 5
练习 3:编写一个脚本,将文件名作为参数并显示其行号。

提示:使用 wc命令来计算行号。

你可以在社区中讨论你的解决方案。

很好! 现在你可以(传递)参数了 ? 在下一章中,你将学习在 Bash 中执行基本数学运算。

(题图:MJ/5a75aa2f-1cb1-4009-a4e6-683cf61bc892)

via: https://itsfoss.com/bash-pass-arguments/

作者:Abhishek Prakash选题:lkxed译者:geekpi校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出
回复

使用道具 举报

沙发
嗥贬叟 发表于 2023-7-29 00:08:52 | 只看该作者
沙发
嗥贬叟
2023-7-29 00:08:52 看楼主
转发了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表

3AAA 当前离线
白银会员

查看:2869 | 回复:1

关于我们  |   侵权投诉受理  |   联系我们  |   Archiver  |  
免责声明:邳州信息网所有言论只代表发表者个人观点,与本站无关
Copyright © 2009-2025 pzxxw.com 版权所有:邳州金银杏文化传媒有限公司  

苏公网安备 32038202000401号

快速回复 返回顶部 返回列表