SIGINT SIGQUIT Bash 脚本
SIGINT SIGQUIT Bash script
我需要编写一个具有以下行为的脚本:
- 如果脚本接收到信号
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
我写了这段代码,但我不确定我做错了什么。
您可以在代码的开头设置陷阱,以确保尽早创建它们(更重要的是,您不需要在每次循环中都重新设置它们)。此外,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
我需要编写一个具有以下行为的脚本:
- 如果脚本接收到信号
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
我写了这段代码,但我不确定我做错了什么。
您可以在代码的开头设置陷阱,以确保尽早创建它们(更重要的是,您不需要在每次循环中都重新设置它们)。此外,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