欢迎,来自IP地址为:18.218.172.249 的朋友


通过变量传递,可以让我们的 Bash 脚本更加有用且更具交互性。

让我们以一个示例来演示脚本的参数传递。

向 shell 脚本传递参数

在执行脚本时,可以给脚本添加额外的变量,示例如下:

# ./my_script.sh var1 var2

在”my_script.sh”脚本里,可以使用 $1 来表示第一个参数”var1″,使用 $2 来表示第二个参数,以此类推。

PS:注意”$0″是一个特殊变量,它保存的是执行脚本文件的文件名。

进入之前创建的脚本文件目录,创建一个脚本文件”arguments.sh”,内容如下:

#!/usr/bin/bash

echo "Script name is: $0"
echo "First argument is: $1"
echo "Second argument is: $2"

保存脚本文件,并将其设置为可执行。执行时注意给脚本添加两个字符串作为其参数,执行结果如下所示:

各个参数之前是用空格或 Tab 来间隔的,如果参数中包括间隔符,则需要用双引号括起。同时,参数时支持调用其它全局变量等内容的。

Bash 脚本最多支持 255 参数,超过10以上的参数需要使用大括号括起,形式为”${10}”、”${11}”…”${n}”。

正如大家看到的,$0指代脚本名称,其余参数用数字指代,还有一些特殊字符指代了其它特定的参数值:

特殊变量 描述
$0 脚本文件名
$1,$2…$9 脚本参数
${n} 脚本10-255参数
$# 参数的数量
$@ 全部参数
$$ 当前脚本的进程ID
$! 上次执行完成的进程ID
$? 上一条命令的执行状态

如果参数数量与脚本内容不符会发生什么

在上面的示例中,我们给脚本传递了两参数并且全部使用了它们。

如果只传递一个参数或多传递参数会发生什么呢?执行结果如下所示:

可以看到,无论是参数传递较使用少了还是多了,脚本都不会发生错误。脚本中使用的未传的参数会默认为空,多传递的参数如果脚本中未使用,那么也不会报错。

当然,如果参数传递少了,而脚本中需要使用缺失参数的内容,那么自然也会产生错误。

接收用户输入实现脚本交互

我们可以使用脚本提示用户通过键盘输入需要的内容,这样可以大大提高脚本的交互性。

“read”命令可以实现这个功能,示例如下:

# echo "Enter something"
# read var

“echo”命令虽然并不是必须的,但它可以提示用户需要输入内容,否则执行”read”命令后,会一直等待用户输入,从而给用户造成困扰。用户输入完成内容后,按回车(enter)键完成输入,输入的内容保存在变量 var 中。

当然,”read”命令也支持显示提示信息,格式如下所示:

# read -p "Enter something" var

现在,创建一个新的脚本文件”interactive.sh”,内容如下:

#!/usr/bin/bash

echo "What is your name, stranger?"
read name
read -p "What's your full name, $name? " full_name
echo "Welcome, $full_name"

脚本先使用 read 命令接收变量 name 值,然后在脚本的 read 语句中使用该该值,然后再得到变量full_name 的值,并最终显示出来。

现在,我们可以完成一个可以交互的脚本了,下一节将使用脚本实现简单的数学运算 >>Bash 基础(四):数学运算<<

One thought on “Bash 基础(三):传参以及接收输入”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注