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

这篇具有很好参考价值的文章主要介绍了shell脚本中main函数中$#获取不到脚本传入参数个数浅析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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函数中,进行逻辑判断和处理。文章来源地址https://www.toymoban.com/news/detail-839739.html

.............
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函数中$#获取不到脚本传入参数个数浅析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何给Java中的main函数参数args传参

    创建java测试类: JAVA类中main函数的参数String [] args,指的是运行时给main函数传递的参数。 传参的方式有以下几种: 1、idea工具的测试类中,左上角菜单中点击Run,选择Edit Configurations…,找到Program Arguments,添加参数   参数添加成功后,运行Java测试类后,结果如下:   2、

    2024年02月08日
    浏览(40)
  • C语言学习之main函数两个参数的应用

    main函数的两个参数: 参数argc: 表示在执行程序时,在终端所输入参数的个数, 包括可执行文件的名称 ; 参数argv: 1.本质上是一个 字符型指针数组 ; 2.用于获取指针数组中每个成员所指向的字符串; 3.存储时,参数argv指向所传递的 字符串的首地址 ; 伪代码表示: 测试代

    2024年02月11日
    浏览(55)
  • 详解main函数参数argc、argv及如何传参

    目录 1、main()函数参数 2、main函数如何传参 2.1 环境准备 2.2 通过 Powershell 窗口传参 2.3 通过vs界面传参 3、int main() 和 int main(int argc, char *argv[]) 特点 1、main()函数参数 在C语言中,main函数可以带参数。main函数的原型通常为以下两种形式之一:         在我们实际写代码时,大都

    2024年04月22日
    浏览(34)
  • Linux【脚本 04】Shell脚本传递参数的4种方式(位置参数、特殊变量、环境变量和命名参数)实例说明

    Shell脚本是一种命令语言,可以用于自动化执行各种任务。在脚本中,我们可以通过参数来传递信息,这样脚本就可以根据这些信息来执行特定的操作。本文将介绍如何在shell脚本中传递参数,包括位置参数、特殊变量、环境变量和命名参数。 1.1 解释器 #!/bin/bash 称为shebang或

    2024年02月06日
    浏览(85)
  • Linux Shell脚本获取当前路径

    目录 1、使用场景 2、原理 3、测试 3.1、测试原理 3.2、测试结果 4、其它 1、使用场景 我们的脚本经常被放置到不同层次的目录之中,有人喜欢放到/opt, 有人喜欢放到/home/myname,这是不可控的。自动化部署工作中,经常要移动、拷贝文件,而获取当前脚本运行目录,才能方便的

    2024年02月14日
    浏览(50)
  • [Linux 进程(三)] 进程优先级,进程间切换,main函数参数,环境变量

    排队的本质就是确认优先级。 优先级是什么?它也是PCB中的一个整型字段 , 数值越小,优先级越高 。是得到某种资源的先后顺序。 Linux进程的优先级数值范围:60~99。 Linux中默认进程的优先级都是80。 为什么要有优先级 ?本质是资源不足。 谈到优先级,就不得不说我们以

    2024年01月21日
    浏览(47)
  • Shell脚本中获取机器的日期和时间

    要在Shell脚本中获取机器的日期和时间,可以使用内置的date命令。以下是如何在Shell脚本中使用date命令来获取机器的日期和时间的示例: 在这个示例中,我们使用了date命令和格式化字符串来获取当前日期和时间。%Y代表年份,%m代表月份,%d代表日期,%H代表小时,%M代表分钟

    2024年02月11日
    浏览(49)
  • Shell脚本函数应用

    记录 :429 场景 :Shell脚本函数应用,定义函数,函数调用,函数传参。 版本 :CentOS Linux release 7.9.2009。 1.普通函数 示例普通函数是没有入参和返回值。 1.1脚本 脚本名称:b2023051701.sh 脚本内容: 1.2执行与输出 执行命令:bash b2023051701.sh 输出结果: 2.函数使用return返回值 S

    2024年02月05日
    浏览(43)
  • linux shell脚本函数

    目录 一、函数        1.传参 二、返回值        return 三、终止符         exit 四、实验                   一、函数         概念:函数是定义一个函数名,可以调用函数方法,完成便捷处理。         函数作用:    1.避免方法名重复。   2.将代码分割成一块一块,便

    2024年02月07日
    浏览(45)
  • shell脚本--函数

    目录 一:shell函数定义 1.函数的含义 2.函数的优点 3.函数的格式 4.函数返回值 (1)return输出 (2)echo输出  二:函数传参 1.情景一  2.情景二 3.情景三  4.情景四  三:递归函数  1.递归函数定义  2.通过递归函数实现阶乘 3.使用递归函数实现目录和文件的依次输出  4.案例实练

    2024年02月03日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包