2016-04-18 2 views
0

, поэтому у меня есть простое лабораторное упражнение в классе. Запись и прерывание/подавление сигнала. эта программа предложит пользователю угадать возраст бабушки. Пользователь может угадать как можно больше раз. ничто не сможет завершить эту программу, когда пользователь вводит правильный ответ. поэтому мой вопрос в этом. Я захватил ctrl_c, но есть ли какой-нибудь «трюк» или команда, которую я могу использовать, чтобы поймать ВСЕ прерывания или мне нужно просто сделать инструкцию для каждого сигнала, который я хочу захватить.сценарий bash для захвата всех перехватов

age=88 

trap ctrl_c INT 

function ctrl_c() 
{ 
echo "**Trapped CTRL-C" 

} 

while [ 1 ] 

do 

echo "Please enter Grandmothers age. " 
read ageGuess 
echo $ageGuess 
if [ $ageGuess == $age ] 
then 
    echo "Exiting!" 
    exit 
fi 

сделано

ответ

1

AFAIK trap xxx INT должно быть достаточно, то вы можете прочитать больше here и here, я упомяну кое-что о вашем сценарии, хотя:

Команда тест ([) использует = для сравнения две строки, а не ==.

Вы должны двойные кавычки все переменные, если вы уверены, что произойдет, если они не указаны, считают это:

a=a 
b=a 
# This will work since `$a` and `$b` contains a value 
if [ $a = $b ]; then 
    echo hello 
fi 

Это не получится, так как $ с пустой и утверждение будет вычисляться: if [ = ]; then

if [ $c = $d ]; then 
    echo fail 
fi 

Вы должны использовать true или : в цикле в то время как:

while :; do 

Вы должны, как правило, всегда используют -r в read, и помните притон:

#!/bin/bash 
age=88 

trap ctrl_c INT 

ctrl_c() { 
    echo "**Trapped CTRL-C" 
} 

while :; do 
    echo "Please enter Grandmothers age. " 
    read -r ageGuess 
    echo "$ageGuess" 
    if [ "$ageGuess" = "$age" ]; then 
    echo "Exiting!" 
    exit 
    fi 
done 

На самом деле код теперь может использовать #!/bin/sh, поскольку он POSIX совместимой.

Просто обратите внимание, что вы можете использовать printf "%s\n" "$user_input" вместо echo "$user_input"

+0

В очень старых оболочек вы должны использовать '[х«$ а»= х«$ B»]' для обработки входов, начиная с '-' – andlrc

Смежные вопросы