【发布时间】:2016-07-06 04:48:01
【问题描述】:
我有一个不同方法的shell脚本。脚本是
status(){
PID=$(ps -ef | grep jmeter_script.sh|grep -v grep|awk '{print $2}')
}
start(){
shift
if [ "$#" -ne 2 ]; then
exit 1;
fi
jmeter.sh -n -t "$1" -l "$2"
}
stop(){
while true; do
read -p "Do you really want to stop?" yn
case $yn in
[Yy]* ) ps -ef | grep jmeter | grep -v grep | awk '{print $2}'|xargs kill; break;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no.";;
esac
view(){
#some code
}
####Main
while [ "$1" != "" ]; do
case "$1" in
start )
start
;;
stop)
stop
;;
status)
status
;;
view)
view
;;
*)
echo $"Usage: $0 {start|stop|status|view}"
exit 1
esac
shift
done
当我尝试使用 ./jmeter_script.sh start abc.jmx log.jtl 运行脚本时,我收到一条错误消息,提示 ./jmeter_script.sh: 19: shift: can't shift that many 然后退出。我在ubuntu 服务器上运行我的脚本。我试图解决这个问题,但我没有找到任何正确的链接来解决这个错误。有人请帮忙。
【问题讨论】:
-
您不能移动超过
$#。当$#为0 时(如在start的调用中),您根本不能使用shift。在函数内部,"$@"等是函数调用的参数,而不是整个脚本的参数。 -
@JonathanLeffler 我该如何解决?如何更改
start()方法中的if condition?或如何更改start()方法,使其采用command line arguments。 -
@Cyrus 我没听懂你说的。你能解释一下我哪里出错了
-
你可能不知道;你打电话给
start arg1 arg2 arg3,这样你就可以把arg1移开,然后使用$1和$2。当然,如果您只想忽略它,为什么要传递原始的$1(我的大纲调用中的arg1)是一个问题——但您可能会自己弄清楚。 -
@user6348718:我错了。
标签: bash shell ubuntu jmeter scripting-language