获取shell脚本运行时间

The following methods demonstrate different methods on how to compute the time a potion of code or script take to complete their execution.

Time Methods - Full Examples (141 downloads)

Method 1 – Using date

The following example will calculate the execution time in seconds by subtracting the system date and time in seconds since 1970-01-01 00:00:00 UTC once right before the script goes to the computation part and once right after.

In order to get the system date and time in seconds since 1970-01-01 00:00:00 UTC we use the command date +%s.

Time Methods - Full Examples (141 downloads)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#!/bin/bash

 

#Print the system date and time in seconds since 1970-01-01 00:00:00 UTC

startTime=$(date +%s);

 

#We pick a random number between 1 and 10.

#Then we delay the execution for that amount of seconds.

sleep $(( (RANDOM % 10) + 1 ));

 

endTime=$(date +%s);

 

#Subtract endTime from startTime to get the total execution time

totalTime=$(($endTime-$startTime));

 

echo "Process finished after $totalTime seconds";

 

exit 0;

Method 2 – Using bash internal SECONDS variable

The following example will calculate the execution time in seconds by reseting the bash internal variable SECONDS to 0, forcing the shell to continue counting from there.

Time Methods - Full Examples (141 downloads)

参考:https://www.oreilly.com/library/view/shell-scripting-expert/9781118166321/c03-anchor-3.xhtml


1

2

3

4

5

6

7

8

9

10

11

12

13

#!/bin/bash

 

#This variable expands to the number of seconds since the shell was started.

#We set it to 0, forcing the shell to continue counting from there.

SECONDS=0;

 

#We pick a random number between 1 and 10.

#Then we delay the execution for that amount of seconds.

sleep $(( (RANDOM % 10) + 1 ));

 

echo "Process finished after $SECONDS seconds";

 

exit 0;

Method 3 – Using bash time

The following example uses the bash time command, which reports the time consumed by a pipeline’s execution.
When time command is executed without its complete path, then the bash built-in time command is executed, instead of the GNU time command. We will use the bash time command in this example and we will use it to run a whole block of commands.
Please note that time command will return the time in seconds as a float (i.e. there will be decimal places. e.g. 1 will be printed as 1.00).

Time Methods - Full Examples (141 downloads)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#!/bin/bash

 

#The bash time command reports the time consumed by pipeline's execution

#When time command is executed without its complete path, then the bash built-in time command is executed, instead of the GNU time command.

#We will use the bash time command in this example and we will use it to run a whole block of commands.

 

#We change the output format of time to print elapsed real time in seconds.

TIMEFORMAT="%E";

#We pick a random number between 1 and 10.

#Then we delay the execution for that amount of seconds.

totalTime=`time sleep $(( (RANDOM % 10) + 1 )) ) 2>&1`;

 

#Please note that time command will return the time in seconds as a float (i.e. there will be decimal places. e.g. 1 will be printed as 1.00).

#This will happen as time has build-in more precision than the first two methods presented here.

echo "Process finished after $totalTime seconds";

 

totalTimeBlock=`time (

    sleep $(( (RANDOM % 10) + 1 ));

    sleep $(( (RANDOM % 10) + 1 ));

) 2>&1`;

echo "Block finished after $totalTimeBlock seconds";

 

exit 0;

Method 4 – Using GNU time

The GNU time command runs the specified program command with the given arguments.
When time command is executed without its complete path (in our case it was /usr/bin/time), then the bash built-in time command is executed, instead of the GNU time command. To make sure we use the GNU time command, we use which to get the full path of the time command.
Please note that time command will return the time in seconds as a float (i.e. there will be decimal places. e.g. 1 will be printed as 1.00).

Time Methods - Full Examples (141 downloads)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#!/bin/bash

#The time command runs the specified program command with the given arguments.

#When time command is executed without its complete path (in our case it was /usr/bin/time), then the bash built-in time command is executed, instead of the GNU time command.

#To make sure we use the GNU time command, we use which to get the full path of the time command.

time=`which time`;

 

#We pick a random number between 1 and 10.

#Then we delay the execution for that amount of seconds.

#We change the output format of time to print elapsed real time in seconds.

totalTime="$( $time -f '%e' sleep $(( (RANDOM % 10) + 1 )) 2>&1 1>/dev/null )";

 

#Please note that time command will return the time in seconds as a float (i.e. there will be decimal places. e.g. 1 will be printed as 1.00).

#This will happen as time has build-in more precision than the first two methods presented here.

echo "Process finished after $totalTime seconds";

 

exit 0;

Notes

RANDOM internal variable

Each time RANDOM internal variable is referenced, a random integer between 0 and 32767 is generated.

By using the RANDOM variable in this command $(( (RANDOM % 10) + 1 )); we perform a modulo on the random value with the static value 10. This way we force the range of valid values to be between 0 and 9.
Later, we add 1 to that value to shift the range to be between 1 and 10.

原文:https://bytefreaks.net/gnulinux/bash/get-execution-time-in-seconds


anzhihe 安志合个人博客,版权所有 丨 如未注明,均为原创 丨 转载请注明转自:https://chegva.com/3157.html | ☆★★每天进步一点点,加油!★★☆ | 

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注