Linux 如何在shell脚本中使用命令行参数传递参数
我不熟悉shell脚本,正在为jmeter编写shell脚本。到目前为止,为了运行jmeter脚本,我编写了如下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 $
#! 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