У меня есть Linux-машина. Мне нужно создать файл bash, который вызывает себя несколько раз, и при выполнении определенного условия выполнить некоторые действия и выйти.

Для этого я должен выполнить сам файл с параметром, например:

./mybash -t 50

-t означает время, когда я хочу, чтобы этот файл вызывал сам себя, и когда оператор if истинен, то: печать, ожидание и выход.

Итак, чтобы создать bash, я написал следующее (которое в настоящее время не работает)

#!/bin/bash
while getopts t: option
do
case "${option}"
in
t) TIMES=${OPTARG};;
esac
done


echo "this is the run number: $TIMES"

if [ $TIMES = 0 ]; then
    #psudo here
    echo "Hello"
    wait 5 seconds
    echo "Done"
else
    sh ./myBash.bash -t ($TIMES - 1)
fi

В чем, кажется, проблема?

1
totothegreat 16 Окт 2019 в 09:27

1 ответ

Лучший ответ
  • Вы ожидаете в скрипте опцию -t, но передаете -n.
  • Вам нужно использовать $((...)) для арифметики оболочки.
  • Предлагаем вам использовать [[ ... ]] вместо [ ... ] в bash.
  • Используйте wait вместо sleep

Вы можете использовать:

#!/usr/bin/env bash

while getopts t: option
do
   case "${option}" in
   t) TIMES=${OPTARG};;
   esac
done


echo "this is the run number: $TIMES"

if [[ $TIMES -eq 0 ]]; then
    #psudo here
    echo "Hello"
    sleep .1
    echo "Done"
else
    bash "$0" -t $((TIMES - 1))
fi

Затем вы можете вызвать свой скрипт как:

bash myBash.bash -t 5
2
anubhava 16 Окт 2019 в 06:34