如何在Shell脚本中传递命令行参数
在shell脚本中,可以通过在脚本名称后输入参数来传递变量作为参数,例如'./script.sh arg1 arg2'。
Shell自动将每个参数名称分配给变量。
参数是在脚本之后添加的空格之间的字符集。
要指定包含空格的参数,我们需要将完整的参数用双引号引起来。
在命令行中输入的每个脚本参数都有一个默认变量名。
脚本名称之后的第一个参数分配给变量$1,第二个参数分配给变量$2,依此类推。
这是一个简单的脚本,显示有关用户的信息,以了解有关脚本shell参数的信息。
#!/bin/bash #The script demonstrates the use of variables entered at the command line. echo "My name is " echo "I work for "
将上述脚本另存为“ name.sh”,并使用chmod命令使其可执行,如下所示。
# chmod +x name.sh
现在,使用两个参数运行脚本。
输出
# ./name.sh foobar example.com My name is foobar I work for example.com
当我们执行上述脚本时,第一个参数foobar被替换为$1变量。
同样,第二个参数代替了$2.
命令行参数范围
命令行参数的范围从$0到$9.
尽管shell程序只能同时访问十个变量,但是我们可以对脚本进行编程以访问在命令行中指定的无限数量的项目。
如果我们尝试访问变量$10,则Shell会将$10解释为引用$1变量,后跟0个字符。
要访问$10变量的值,请使用shift命令。
这将从列表中删除第一个参数的值,并将其替换为第二个。
然后,第三个值将替换第二个值,依此类推。
最初为$10的值将变为$9变量的值。
例如,此脚本(名为var.sh)显示$1到$10变量的值。
shift命令删除第一个变量的值,而每个其他变量的值向下移位并成为前一个变量的值。
#!/bin/bash echo " " shift echo " "
输出
# ./var.sh a b c d e f g h i j a b c d e f g h i a0 b c d e f g h i j b0
特殊变量参考
$#
$variable包含在命令行上输入的参数总数。
此变量的值始终是整数。
考虑“ name.sh”的示例,有两个参数分别作为“ Sandeep”和“ example.com”传递。
所以echo $将输出2.
$*
此特殊变量包含已传递给脚本的所有命令行参数,以单个单词形式列出。
echo $* will output foobar example.com
$@
$@特殊变量与$*相似,因为它包含所有指定为命令行参数的值。
但是,$@将每个参数作为单独的单词列出,而$*不能区分分隔值的普通空格和带引号的空格。
使用$*将值Hello World返回为“ Hello World”,而使用$@时,将返回相同值作为“ Hello”“ World”。
echo $@ will output foobar example.com
更多Shell变量
$0
变量$0包含脚本名称本身。
$?
回声是最后一个命令的退出状态。
如果命令成功运行,则结果为0(零),否则为非零。
# echo $? 0
$$
当前shell的回波PID
# echo $$ 12354