所以我在课堂上进行简单的实验练习。写入和中断/信号陷阱程序。该程序将提示用户猜测祖母的年龄。用户可以尽可能多地猜测。当用户输入正确的答案时,没有什么能够终止此程序的执行。 所以我的问题是这个。我已经捕获了ctrl_c但是有一些“技巧”或命令我可以用来捕获所有中断,或者我只需要为我想要捕获的每个信号做一个声明。
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
完成
答案 0 :(得分: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
这将失败,因为$ c为空,语句将评估为:if [ = ]; then
if [ $c = $d ]; then
echo fail
fi
您应该在while循环中使用true
或:
:
while :; do
您通常应始终在-r
中使用read
,并记住shebang:
#!/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"