Linux 如何在shell脚本中使用命令行参数传递参数

Linux 如何在shell脚本中使用命令行参数传递参数,linux,bash,shell,jmeter,scripting-language,Linux,Bash,Shell,Jmeter,Scripting Language,我不熟悉shell脚本,正在为jmeter编写shell脚本。到目前为止,为了运行jmeter脚本,我编写了如下shell脚本: #! bin/sh start(){ echo "Please enter the file name .jmx extension" read file echo "Please enter the log file name .jtl extension" read log_file jmeter.sh -n -t $file -l $

我不熟悉shell脚本,正在为jmeter编写shell脚本。到目前为止,为了运行jmeter脚本,我编写了如下shell脚本:

#! bin/sh    
start(){
    echo "Please enter the file name .jmx extension"
    read file

echo "Please enter the log file name .jtl extension"
read log_file

jmeter.sh -n -t $file -l $log_file
}
while [ "$1" != "" ]; do
case "$1" in
        start )
            start
            ;;
         *)
            echo $"Usage: $0 {start|stop}"
            exit 1
        esac
   shift
done
我有一个停止方法来终止进程。在这里,对于这个脚本,我要求用户在不同的行中输入
.jmx
文件名和
.jtl
文件名。但是我希望用户能够在键入执行脚本的命令时传递
.jmx
文件名和
.jtl
文件名

示例:
$./script.sh.jmx fileName.jtlfilename
然后,脚本应该运行


我不知道怎么做。有人能帮忙吗?

既然
读取
从stdin读取,您需要在stdin上传递文件名:

{ echo "file.jmx"; echo "file.jtl"; } | ./script.sh start
使用here文档可以更整洁:

./script.sh start <<END_INPUT
file.jmx
file.jtl
END_INPUT

要重写脚本以获取所有参数,请执行以下操作:

#!/bin/sh

usage() {
    echo "Usage $0 {start ...|stop}"
    # provide more info about arguments for the start case
    # provide an example usage
}

case "$1" in 
    stop) do_stop_stuff ;;
    start)
        shift
        if [ "$#" -ne 4 ]; then usage; exit 1; fi
        jmeter.sh -n -t "$1" "$2" -l "$3" "$4"
        ;;
    *) usage ;;
esac

我想使用一个单行命令运行脚本,比如
$./script.sh.jmx fileName.jtl fileName
,因为脚本完成后,我将从jenkins运行参数化脚本。谢谢。这个很好用。我正在使用
是因为我有一些其他的方法,你能告诉我如何使用
方法中提供的
开始
答案,并在
中调用该方法,而
循环当我试着运行它时,它说
不能移动那么多
。你能帮我解决这个问题吗?我在脚本中有4个以上的函数,因此,我使用的是
while循环
,我在函数中提供了
开始
代码,并在
while循环
中调用它,我认为您不需要while循环。假设脚本使用子命令“start”、“stop”、“status”和“restart”。现在忽略任何子命令参数,只有在一次运行期间处理多个子命令时,while循环才有意义(例如
脚本stop start status
)-IMO这是一个糟糕的UI。您不会说
git add commit push checkout merge
。保持简单。只处理一个子命令,让用户调用脚本两次(
script restart&&script status
)现在,我已经像
start(){shift if[“$#”-ne 2];然后退出1;fi jmeter.sh-n-t“$1”-l“$2”}/code>那样编辑了我的脚本,并在stop中使用
case“$1”调用该方法用法;;esac
这不起作用。我想知道如何有一个
方法
,它接受
命令行参数
,并在
案例中调用它。你能告诉我吗
#!/bin/sh

usage() {
    echo "Usage $0 {start ...|stop}"
    # provide more info about arguments for the start case
    # provide an example usage
}

case "$1" in 
    stop) do_stop_stuff ;;
    start)
        shift
        if [ "$#" -ne 4 ]; then usage; exit 1; fi
        jmeter.sh -n -t "$1" "$2" -l "$3" "$4"
        ;;
    *) usage ;;
esac