SIGINT SIGQUIT Bash脚本

时间:2017-01-04 14:21:48

标签: bash sigint

我需要编写一个具有以下行为的脚本:

  • 如果脚本收到信号SIGINT,则脚本将计数器的值递增1并将其值打印到标准输出。
  • 如果收到信号SIGQUIT,则会将计数器的值减一,并将其​​值打印到标准输出。
  • 如果计数器的当前值小于-5或大于+5,则程序终止。
#!/bin/bash 
count=0
while [  $count -lt -5 ] && [ $count -gt 5 ];  do
    sleep 1
trap 'count=$(expr $count + 1)' SIGINT
echo $count
trap count=$(expr $count - 1) SIGQUIT
echo $count
done

我写了这段代码,但我不确定我做错了什么。

1 个答案:

答案 0 :(得分:0)

您可以在代码的开头设置陷阱,以确保它们尽早创建(更重要的是,您不需要每次都通过循环重置它们)。此外,expr在shell中执行算术已经过时了;改为使用算术表达式。

然而,最大的问题是count 从不同时小于-5且大于5;你需要交换比较。

trap 'count=$((count + 1))' SIGINT
trap 'count=$((count - 1))' SIGQUIT

count=0
# Loop will enter at least once, since -5 < 0 < 5
while [ "$count" -gt -5 ] && [ "$count" -lt 5 ]; do
    sleep 1
    echo "$count"
done