#!/bin/bash trap cleanup 1 2 3 6 15 cleanup() { loop=false; } usage() { echo "repeat.sh [-i <#loops>] [-d delay-in-seconds] [-f] [params]" echo echo -e "-i #loops:" echo -e "\tnumber of loops, default: -1 (infinite)" echo -e "-d delay-in-seconds:" echo -e "\tdelay in seconds between iterations, default: 0 (no delay)" echo -e "-f:" echo -e "\toutput iteration number to ftrace log if ftrace is enabled" exit $1 } init_ftrace_log() { local _debugfs _debugfs=`sed -ne 's/^debugfs \(.*\) debugfs.*/\1/p' /proc/mounts` [[ -z "$_debugfs" ]] || [[ ! -f "${_debugfs}/tracing/trace_marker" ]] || fmarker="${_debugfs}/tracing/trace_marker" || true } loop=true max_loop=-1 delay_sec=0 ftrace_log_enable=false cmd="" fmarker="" cnt=1 while [ $# -gt 0 ]; do case $1 in -h | --help) usage 0;; -i) shift; max_loop=$1; shift;; -d) shift; delay_sec=$1; shift;; -f) ftrace_log_enable=true; shift;; *) cmd="$cmd $1"; shift;; esac done [[ -n "$cmd" ]] || usage 1 ! $ftrace_log_enable || init_ftrace_log ### loop ### while $loop; do [ "$max_loop" = "-1" ] || [ "$cnt" -le "$max_loop" ] || break echo "cnt: $cnt" [[ -z "$fmarker" ]] || echo "cnt: $cnt" > $fmarker || true # [[ -z "$fmarker" ]] || echo "ftrace cnt: $fmarker" || true eval "$cmd" || break : $((cnt += 1)) [[ $delay_sec -le 0 ]] || sleep $delay_sec done echo "done cnt: $cnt"