Как создать цикл в сценарии удара

Более новые версии bash (Я верю, по крайней мере, v4), может использовать readline вход и текст перед заливкой.

read -e -p "> " -i "our-platform-7.26-2.17-res4" SuggestDefaultPlatform

Если удар 4 не доступен, я использую rewrap* для этого. -P опция позволяет Вам предварительно заполнить текст строки..

SuggestDefaultPlatform=$(rlwrap -P "our-platform-7.26-2.17-res4" bash -c 'echo -n "> "; read response; echo $response')

Или в случае, может просто совершить нападки пользователь, входят для принятия значения или может отредактировать строку перед представлением. Это будет похоже на это:

> our-platform-7.26-2.17-res4_

Где _ курсор. Можно создать резервную копию полностью к o, но > останется как подсказка и не может быть переопределен. Только текст после подсказки находится в переменной.


* rlwrap самостоятельно, возможно, должен быть установлен также.

2
11.06.2014, 07:52
3 ответа
while true; do
   if [ -f $file ]; then
       truecrypt -d /dev/sdj1
       break
   fi
       $sendanemail
       sleep n # change n to number of seconds to pause 
done

Цикл , пока не будет запущен оператор break, будет продолжаться бесконечно до тех пор, пока не будет запущен оператор break. Если [ -f $file ] вычислит true, то запустится блок кода и break завершит цикл. Иначе $sendemail начнётся пожар, тогда уснёт n и цикл начнётся заново

.
2
27.01.2020, 22:00
[

] Хорошо, для любого, кому он нужен, это мой окончательный сценарий, и он выглядит так, как будто работает как очарование. [

] [
#!/bin/sh
#
# Comments....

############ Parameters ############
attempts="3"
from="from@example.com"
to="to@example.com"
smtp="smtp.example.com:25"
username="from@example.com"
pass="emailpass"
message="Sync to hard disk 1TB completed. You shall now remove the external hard drive."
subject="SRVR: Sync to hard disk 1TB completed."
file="/media/truecrypt2/sync/dummy.file"
sendanemail="sendemail -f $from -t $to -u $subject -s $smtp -xu $username -xp $pass -m $message"
subjectfail="Unable to umount external hard disk."
messagefail="Unable to dismount external hard disk after $attempts attempts. Please check it."
sendanemailfail="sendemail -f $from -t $to -u $subjectfail -s $smtp -xu $username -xp $pass -m $messagefail"
############ End Parameters ############

sleep 4

touch $file

if [ -f $file ];
then
   cp /storage/sdf1/folder/*.txt /media/truecrypt2/sync/ -n -r
   cp /storage/sdf1/folder/*.jpg /media/truecrypt2/sync/ -n -r
else
   echo "my truecrypt password" | truecrypt /dev/sdj1 /media/truecrypt2 -t -k="" --protect-hidden=no -p=""
   cp /storage/sdf1/folder/*.txt /media/truecrypt2/sync/ -n -r
   cp /storage/sdf1/folder/*.jpg /media/truecrypt2/sync/ -n -r
fi

sleep 0

while [ -f $file ]; do
    truecrypt -d /dev/sdj1
    sleep 5

    attempts=$(($attempts - 1))         # decrement timeout counter.
    if [ $attempts -eq 0 ]; then
      $sendanemailfail
      break
    fi

    [[ ! -f $file ]] && $sendanemail    # only send email once when `truecrypt -d` succeeds.
done
]
1
27.01.2020, 22:00
while [[ -f $file ]]; do
    truecrypt -d /dev/sdj1
    sleep 10    # pause for 10 seconds
done
$sendanemail

Учитывая, что ваше $subject является "Завершенным" сообщением, я полагаю, что вы хотите отправить только одно электронное сообщение.

Эта версия будет многократно пытаться размонтировать ваш диск truecrypt до тех пор, пока он не станет успешным, а затем отправить одно электронное сообщение.

Если USB-накопитель не удастся размонтировать, у вас будет бесконечный цикл. Альтернативой является добавление таймаута в скрипт.

attempts=5
while [[ -f $file ]]; do
    truecrypt -d /dev/sdj1
    sleep 10

    attempts=$(($attempts - 1))
    if [[ $attempts -eq 0 ]]; then
        subject="Failed to unmount /dev/sdj1"
        message="Cannot umount external hard disk.  Please verify sync to hard disk 1TB completed and manually unmount the external hard disk before removal."
        sendanemail="sendEmail -f $from -t $dest -u $subject -s $smtp -xu $username -xp $pass -m $message"
        break
    fi

    # attempts=$(($attempts - 1))  # this adds an extra attempt
done
$sendanmail
1
27.01.2020, 22:00

Теги

Похожие вопросы