shell脚本中main函数中$#获取不到脚本传入参数个数浅析

2024-04-18 0 572
目录
  • 解决方案1:
  • 解决方案2:

Linux的shell脚本,有时候我们在运行shell脚本时会给脚本传入参数,出于逻辑上的严谨,在脚本中可能会做一些逻辑判断或处理,例如判断脚本传入参数的个数。一般我们会用$#获取传入参数的个数,假如,我们在shell脚本的main函数中去判断脚本传入参数的个数,类似如下所示:

………
function main()
{
if [ $# != 1 ]; then
echo \”This script must be run with one parameter\”
echo \”Usage:mysql_slowlog_monitor.sh 6h\”
exit 1
fi
check_enviroment;
send_slow_rpt;
return 0;
}
main;

如果你去调试这个shell脚本的话,就会发现main函数中$#的值永远是0, 如果将脚本调整一下,将判断传入参数个数的脚本放到main函数外(不能放在其它函数中),如下所示,这样就Ok了

………….
if [ $# != 1 ]; then
echo \”This script must be run with one parameter\”
echo \”Usage:mysql_slowlog_monitor.sh 6h\”
exit 1
fi
………….
function main()
{
check_enviroment;
send_slow_rpt;
return 0;
}
main;

那么为什么会出现这种情况呢?在解答这个问题前,我们先来了解一下$#的用途,$#表示脚本传入参数的个数,也表示一个函数(function)调用时,传入函数的参数(arguments)个数,而且它也是有作用域范围,如果在函数(function)内部的话,它表示的函数调用时,传入参数的个数。

那么再来解答这个问题,上面shell脚本中,main函数调用时写法为main;意味着函数调用时没有传入任何参数,所以$#在main中值为0,而在脚本mysql_slowlog_monitor.sh中获取传入的参数个数,应该在脚本中,而且在脚本中的函数外面获取它的值。

那么怎么解决这个问题呢?

解决方案1:

将判断脚本调用时传入的参数的脚本放到函数外面,就像上面示例脚本那样处理。

解决方案2:

借助全局变量,先在函数外获取脚本传入参数的个数,将其赋值为全局变量,然后在mian函数中,进行逻辑判断和处理。

………….
ARGS=$#
………….
function main()
{
if [ $ARGS != 1 ]; then
echo \”This script must be run with one parameter\”
echo \”Usage:mysql_slowlog_monitor.sh 6h\”
exit 1
fi
check_enviroment;
send_slow_rpt;
return 0;
}
main;

到此这篇关于shell脚本中main函数中$#获取不到脚本传入参数个数浅析的文章就介绍到这了,更多相关shell脚本传入参数个数内容请搜索悠久资源网以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源网!

您可能感兴趣的文章:

  • shell脚本中main函数中$#获取不到脚本传入参数个数浅析
  • PowerShell函数中把参数传入另一个函数的函数传参例子
  • bash shell命令行选项与修传入参数处理
  • Shell特殊变量(Shell $#、$*、$@、$?、$$)的使用
  • Shell $0, $#, $*, $@, $?, $$和命令行参数的使用
  • 浅谈linux中shell变量$#,$@,$0,$1,$2的含义解释

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 linux shell shell脚本中main函数中$#获取不到脚本传入参数个数浅析 https://www.u-9.cn/jiaoben/linuxshell/186822.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务