# 0000 # 0001 # 0010 # 0011 # 0100 # 0101 # 0111 # 1000 # 1001 # 1010 # 1011 # 1100 # 1101 # 1111 RUN_MASK=31 LAST_BIT_POS=5 RUN_MASK_HIGHEST=0 for ((i=$LAST_BIT_POS; i>0; i--)); do b=$((2**$((i-1)))) if [ $((b & $RUN_MASK)) -gt 0 ]; then RUN_MASK_HIGHEST=$i break fi done echo $RUN_MASK_HIGHEST bit=1 for ((i=0; i<$LAST_BIT_POS; i++)); do runlevel="RUNLEVEL $bit" if [[ $((RUN_MASK & $bit)) -eq ${bit} ]]; then s="$runlevel - ${description[$i]}" >&2 echo -e "\033[;96mRUNNING $s\033[;39m" # source $((i+1))_${files[$i]}.sh if [ $? -ne "0" ]; then >&2 echo -e "\033[;31mFAILED $s\033[;39m" exit 1; fi >&2 echo -e "\033[;32mSUCCEEDED $s\033[;39m" >&2 echo -e "\033[;96mConfiguration state after $runlevel execution\033[;39m" # confini-dump --schema-dir ./config fi bit=$((bit*2)) done