我正在学习bash脚本,目前在函数内部遇到if
语句时遇到问题。以下代码返回两个错误;两者都引用if
和elif
条件并说[: 12000: unary operator expected
。
function calculateBonus {
# If the sales figure is greater than 1 million, bonus is £1500
if [ $1 >= 1000000 ]
then
bonus=1500
# If greater than 100000, bonus is £750
elif [ $1 >= 100000 ]
then
bonus=750
else
bonus=0
fi
# Return the bonus figure
return $bonus
}
read sales
bonus=$(calculateBonus $sales)
我尝试过使用双方括号,但出于某种原因我给出了语法错误。当我使用[[ some_condition ]]
代替[ some_condition ]
时,有人可以解释上述错误的原因以及语法错误。
答案 0 :(得分:2)
试试这个:
function calculateBonus() {
if (( $1 >= 1000000 )); then
bonus=1500
elif (( $1 >= 100000 )); then
bonus=750
else
bonus=0
fi
}
read sales
calculateBonus "$sales"
echo "Bonus is $bonus"
(())
是算术评估。该函数设置变量bonus
,可在调用函数后使用。函数中的return
不会按照您的想象执行(它是退出代码)。另请参阅this article有关从函数返回值的信息。
This article对各种测试结构进行了很好的讨论,并举例说明。
答案 1 :(得分:1)
$checkbox_value = get_post_meta( get_the_ID(), 'compel_checkbox', true);
if($checkbox_value == 'on') {
function calculateBonus {
# If the sales figure is greater than 1 million, bonus is £1500
if [ $1 -ge 1000000 ]
then
bonus=1500
# If greater than 100000, bonus is £750
elif [ $1 -ge 100000 ]
then
bonus=750
else
bonus=0
fi
}
read sales
calculateBonus $sales
echo $bonus
=>大于或等于
请参阅与-ge
相同的man test
,[
将您引导至help [
man test
,<
用于bash中的字符串比较(字典/词典顺序)
注意:bash还有一个高级if条件运算符>
,其所有功能都包含[[
或test
以及更多功能,请参阅[