У меня есть сценарий оболочки с различным methods.The сценариемКак разрешить ошибку «shift: can not shift that many» при запуске сценария оболочки?
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 Как это исправить? Как изменить условие 'if 'в методе' start() '? или Как изменить метод 'start()' так, чтобы он принимал «аргументы командной строки». – user6348718
@ Кир. Я не понял, что ты сказал. Не могли бы вы объяснить, где я пошла не так? – user6348718