Shell脚本传递参数的3种方法比较

 更新时间:2015年05月08日 09:43:37   投稿:junjie  
这篇文章主要介绍了Shell脚本传递参数的3种方法比较,本文直接给出代码示例,在代码中包含详细注解,需要的朋友可以参考下
#!/bin/bash
#extracting command text_text_text_line options as parameters

help_info(){
  echo "NAME"
  echo "\t$0"
  echo "SYNOPSIS"
  echo "\t$0 is a shell test about process options"
  echo "DESCRIPTION"
  echo "\toption like -a -b param1 -c param2 -d"
}

if [ $# -lt 0 ]
then
  help_info
fi

nomal_opts_act()
{
  echo -e "\n### nomal_opts_act ###\n"

  while [ -n "$1" ]
  do
  case "$1" in 
    -a)
      echo "Found the -a option"
      ;;
    -b)
      echo "Found the -b option"
      echo "The parameter follow -b is $2" 
      shift
      ;;
    -c)
      echo "Found the -c option"
      echo "The parameter follow -c is $2"
      shift
      ;;
    -d)
      echo "Found the -d option"
      ;;
     *)
       echo "$1 is not an option"
      ;;
  esac
  shift
  done
}

#用shell命令自建的选项解析,可以按照自己的想法实现
#优点:自己定制,没有做不到,只有想不到
#缺点:麻烦

getopt_act()
{
  echo -e "\n### getopt_act ###\n"

  GETOPTOUT=`getopt ab:c:d "$@"`
  set -- $GETOPTOUT 
  while [ -n "$1" ] 
  do
  case $1 in 
    -a)
      echo "Found the -a option"
      ;;
    -b)
      echo "Found the -b option"
      echo "The parameter follow -b is "$2""
      shift
      ;;
    -c)
      echo "Found the -c option"
      echo "The parameter follow -c is "$2""
      shift
      ;;
    -d)
      echo "Found the -d option"
      ;;
    --)
      shift
      break
      ;;
     *)
       echo "Unknow option: "$1""
      ;;
  esac
  shift
  done

  param_index=1
  for param in "$@"
  do
    echo "Parameter $param_index:$param"
    param_index=$[ $param_index + 1 ] 
  done
}

#用getopt命令解析选项和参数
#优点:相对与getopts来说是个半自动解析,自动组织选项和参数,用 -- 符号将选项与参数隔开
#缺点:相对于getopts的缺点
#1.需要与set -- 命令配合,不是必须,需要手动shift
#2.选项参数中不支持空格如 -a -b dog -c "earth moon" -d -f param1 param2 就会解析错误

getopts_act()
{
  echo -e "\n### getopts_act ###\n"
  while getopts :ab:c:d ARGS
  do
  case $ARGS in 
    a)
      echo "Found the -a option"
      ;;
    b)
      echo "Found the -b option"
      echo "The parameter follow -b is $OPTARG"
      ;;
    c)
      echo "Found the -c option"
      echo "The parameter follow -c is $OPTARG"
      ;;
    d)
      echo "Found the -d option"
      ;;
     *)
       echo "Unknow option: $ARGS"
      ;;
  esac
  done

  shift $[ $OPTIND -1 ] 
  param_index=1
  for param in "$@"
  do
    echo "Parameter $param_index:$param"
    param_index=$[ $param_index + 1 ] 
  done
}

#getopts 命令解析选项和参数
#优点:可在参数中包含空格如:-c "earth moon"
#      选项字母和参数值之间可以没有空格如:-bdog
#      可将未定义的选项绑定到?输出
#      Unknow option: ?

nomal_opts_act -a -b dog -c earth -d -f param1 param2
getopts_act -a -b dog -c "earth moon" -d -f param1 param2
getopt_act -a -b dog -c earth -d -f param1 param2

相关文章

  • linux下通过命令行获取gmail的新邮件

    linux下通过命令行获取gmail的新邮件

    在这篇文章中,我将为你展示 Linux 命令行的另一个漂亮干练的使用案例:访问 Google 的 Gmail 服务,有需要的小伙伴可以参考下。
    2015-05-05
  • 利用Shell脚本循环读取文件中每一行的方法详解

    利用Shell脚本循环读取文件中每一行的方法详解

    读取文件是我们在日常工作中经常遇到的一个需求,下面这篇文章主要给大家介绍了关于利用Shell脚本循环读取文件中每一行的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习下吧。
    2017-09-09
  • linux C语言开发管道通信实例详解

    linux C语言开发管道通信实例详解

    这篇文章主要介绍了linux C语言开发管道通信实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • sed找到关键字所在行并将其前面的第一个字符删除的命令

    sed找到关键字所在行并将其前面的第一个字符删除的命令

    sed找到关键字所在行并将其前面的第一个字符删除的命令,需要的朋友可以参考下
    2013-02-02
  • Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

    Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍

    这篇文章主要介绍了Shell脚本中的特殊字符(美元符、反斜杠、引号等)作用介绍,还包括其它特殊字符,需要的朋友可以参考下
    2015-05-05
  • @echo off的作用详解

    @echo off的作用详解

    本文主要介绍了@echo off的作用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • shell脚本中 /dev/null 的用法小结

    shell脚本中 /dev/null 的用法小结

    /dev/null 通常被用于丢弃不需要的输出流,或作为用于输入流的空文件,这些操作通常由重定向完成,任何你想丢弃的数据都可以写入其中,本文重点给大家介绍shell脚本中 /dev/null 的用法小结,感兴趣的朋友一起看看吧
    2021-09-09
  • git 使用及常用命令

    git 使用及常用命令

    本文是关于git 的使用和一些git使用小技巧,以及git的常用命令,进行的整理,希望能帮助有需要的小伙伴
    2016-07-07
  • Linux shell脚本实现CPU预警

    Linux shell脚本实现CPU预警

    这篇文章主要介绍了Linux shell脚本实现CPU预警的方法,并附上代码以及用法,有需要的小伙伴可以参考下。
    2015-03-03
  • shell grep 查找进程的小技巧

    shell grep 查找进程的小技巧

    大部分人在写Shell 过滤进程的时候 都会使用 grep 在 ps aux 的输出结果中查找指定的进程,但此时也会把 grep 进程也显示出来
    2013-01-01

最新评论