Bash脚本如果语句不起作用

时间:2014-12-22 10:39:25

标签: bash shell if-statement

我正在尝试编写一个脚本,将三个指定的参数添加到一起,如果没有参数输出:“无参数”。

麻烦的是,即使有三个参数,也总是输出“无参数”。

我是shell脚本的新手。

这是我的剧本:

#!/bin/sh
if [[("$#"==0)]]; then 
echo "No arguments specified"
exit 1
fi


sum=0
sum=$(expr $1 + $2 + $3)
echo "$sum"
exit 0

2 个答案:

答案 0 :(得分:6)

将您的shebang更改为#!/bin/bash并使用

if (( $# == 0 )); then

或使用与POSIX兼容的[

if [ $# -eq 0 ]; then

不要忘记[[[都是命令,而不是语法,因此与任何其他命令一样,您需要将传递给命令的参数与空格分开。

如果您使用的是bash功能,例如[[,则应始终使用#!/bin/bash shebang,否则会遇到问题。

正如下面评论中另一个答案所指出的,检查你是否已经传递了三个参数可能是一个更好的主意:

#!/bin/bash
if (( $# < 3 )); then 
    echo "Insufficient number of arguments specified"
    exit 1
fi

sum=$(( $1 + $2 + $3 ))
echo "$sum"

我对您的脚本进行了其他一些更改,例如不将sum初始化为0并使用更现代的$(( ))来评估变量的总和。

答案 1 :(得分:3)

我想你要求的是:

if [ $# -eq 0 ];