2016-07-04 3 views
3

Я новичок в скрипте оболочки, и я работаю над сценариями оболочки для jmeter. До сих пор запустить JMeter сценарий, я написал свой скрипт, как показано ниже:Как передать параметры с помощью аргументов командной строки в сценарии оболочки

#! 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 .jtl fileName, тогда скрипт должен работать.

Я не знаю, как это сделать. Кто-то может помочь?

ответ

1

Поскольку read читает из стандартного ввода, вам нужно передать имена файлов на стандартный ввод:

{ echo "file.jmx"; echo "file.jtl"; } | ./script.sh start 

Используя здесь-документ может быть аккуратнее:

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

немного обзора кода : если для использования используется только один параметр, «start» или «stop», вам не нужен цикл while:

#!/bin/sh 

do_start_stuff() { ... } 
do_stop_stuff() { ... } 

case "$1" in 
    start) do_start_stuff;; 
    stop) do_stop_stuff;; 
    *)  echo "Usage: $0 {start|stop}"; exit 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 
+0

Я хочу, чтобы запустить сценарий с помощью команды однолинейной как этот '$ ./script.sh .jmx FileName .jtl filename' так как после завершения скрипта я запускаю параметризованный скрипт из jenkins. – user6348718

+0

Спасибо. Это прекрасно работает. Я использую 'while', потому что у меня есть другие методы, и вы можете сказать мне, как использовать ответ' start', который вы предоставили в 'method', и вызвать этот метод в цикле' while' – user6348718

+0

Он работал для 'while 'loop также. Спасибо – user6348718