R语言,Perl语言, Shell传递参数的方法

Posted 育种数据分析之放飞自我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言,Perl语言, Shell传递参数的方法相关的知识,希望对你有一定的参考价值。

1, R语言

思路:
1, 加载optparse包
2, 设置参数, 为list
3, 解析参数
4, 如果参数为空, 打印帮助文档

#!/usr/bin/Rscript
library(optparse)

option_list <- list(
  make_option(c("-a", "--aa"), type = "integer", default=FALSE,
              help="Input a number"),
  make_option(c("-b", "--bb"), type="integer", default=FALSE,
              help="Input a number")
)

opt_parser = OptionParser(option_list=option_list);
opt = parse_args(opt_parser);
a = opt$a
b = opt$b
if (opt$a==0&&opt$b==0){
  print_help(opt_parser)
  stop("请输入参数", call.=TRUE)
  }
c = a+b
cat(" a is:",a,"\n","b is:",b,"\n","a plus b is:",c,"\n")

打印帮助文档:
帮助文档打印, 参数为空, 或者参数为-h或者—help时, 打印出帮助文档.

[dengfei@bogon qunti]$ Rscript plus.R
Usage: plus.R [options]

Options:
    -a AA, --aa=AA
        Input a number

    -b BB, --bb=BB
        Input a number

    -h, --help
        Show this help message and exit

Error: 请输入参数
Execution halted

正确输出结果:

[dengfei@bogon qunti]$ Rscript plus.R -a 1 -b 2
 a is: 1 
 b is: 2 
 a plus b is: 3

2, Perl语言

参考: 在Perl、Shell和Python中传参与输出帮助文档https://zhuanlan.zhihu.com/p/53067406)

一个简单的示例, 一个perl程序, 计算a+b的值

有两个参数
-a
-b

代码如下:

#!/usr/bin/perl
use strict;
use Getopt::Long;

=head1 Description

    This script is calculate the sum of a and b

=head1 Usage

    $0 -a <input number> -b <input number> 

=head1 Parameters

    -a  [int]   Input raw number
    -b  [int]   Input raw number
=cut

my($a,$b);
GetOptions(
    "a:s"=>\$a,
    "b:s"=>\$b
    );

die `pod2text $0` if ((!$a) or (!$b));
print("The result of a plus b is:",$a+$b,"\n");

逻辑如下:
1, 使用perl 包 Getopt::Long进行参数书写
定义b, 然后使用GetOptions函数
使用die函数, 如果没有相关参数, 就die

my($a,$b);
GetOptions(
    "a:s"=>\$a,
    "b:s"=>\$b
    );

die `pod2text $0` if ((!$a) or (!$b));

2, 使用POD文档, 编写指南
包括:
描述
使用方法
参数介绍

=head1 Description

    This script is calculate the sum of a and b

=head1 Usage

    $0 -a <input number> -b <input number> 

=head1 Parameters

    -a  [int]   Input raw number
    -b  [int]   Input raw number
=cut

打印帮助文档:
如果没有添加参数:

[dengfei@bogon qunti]$ perl 1.pl 
Description
        This script is calculate the sum of a and b

Usage
        $0 -a <input number> -b <input number>

Parameters
        -a  [int]   Input raw number
        -b  [int]   Input raw number

正确输出结果:

[dengfei@bogon qunti]$ perl 1.pl -a 1 -b 2
The result of a plus b is:3

3, Shell脚本传递参数

思路:
1, 定义一个名为helpdoc的函数, 如果没有参数, 就返回这个函数, 打印出帮助信息
2, 定义参数, 使用getopts, 参数放在顿号里面, 可以将参数赋值给a和b, 下面直接调用b即可
3, 执行加号, 打印结果.

#!/bin/bash

# 定义帮助文档
helpdoc(){
    cat <<EOF
Description:
    This is the description.

Usage:

    $0 -a <input number> -b <input number> 

Option:

    -a    a number
    -b    b number
EOF
}

# 如果没有参数, 输出帮助文档
if [ $# = 0 ]
then
    helpdoc
    exit 1
fi

while getopts ":a:b:" opt
do
    case $opt in
        a)
            a=$OPTARG
            ;;
        b)
            b=$OPTARG
            ;;
        ?)
            echo "Unknown option: $opt"
            helpdoc
            exit 1
            ;;
    esac
done
sum=$(expr $b + $a)    
echo "a is $a"
echo "b is $b"
echo "a plus b is:$sum"

打印帮助文档:

[dengfei@bogon qunti]$ bash plus.sh
Description:
    This is the description.

Usage:

    plus.sh -a <input number> -b <input number> 

Option:

    -a    a number
    -b    b number

正确输出结果:
[dengfei@bogon qunti]$ bash plus.sh -a 1 -b 2
a is 1
b is 2
a plus b is:3

以上是关于R语言,Perl语言, Shell传递参数的方法的主要内容,如果未能解决你的问题,请参考以下文章

perl 语言循环语法太灵活

为啥脚本语言(例如 Perl、Python、Ruby)不适合作为 shell 语言? [关闭]

R语言编程时如何传递文件名参数

如何在C语言中调用shell命令

如何在C语言中调用shell命令

Perl语言程序应用(资料汇总版)