如何在shell中生成此if语句
我很难想出如何做这个if语句。我想这样做: IF(函数只有一个参数 $1是一个目录(在当前 文件夹)或IF(函数有2个 参数和$1不是目录)然后 结束 对不起,如果不是很清楚如何在shell中生成此if语句,shell,if-statement,Shell,If Statement,我很难想出如何做这个if语句。我想这样做: IF(函数只有一个参数 $1是一个目录(在当前 文件夹)或IF(函数有2个 参数和$1不是目录)然后 结束 对不起,如果不是很清楚 提前感谢您已经说了问题中需要的内容: if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ] then ... fi 您也可以使用其他运算符—这将在Bourne shell中工作,更不用说Korn或其他POSIX shell了(假设$#在函数中正常工作—在Bash中
提前感谢您已经说了问题中需要的内容:
if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ]
then
...
fi
您也可以使用其他运算符—这将在Bourne shell中工作,更不用说Korn或其他POSIX shell了(假设$#在函数中正常工作—在Bash中就是这样)
请注意,您可以在测试(“[”)内置中使用“-o”运算符;长期以来(但不一定仍然相关)的建议是不要尝试同时使用“-a”和“-o”(或者,甚至使用“-a”或“-o”)。按所示操作是可靠的,并且避免了转义括号(括号)等的需要。我相信OP想要“or”而不是
elif
。它可能希望在每种情况下做一些(略微)不同的事情,如示例所示。
if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ]
then
...
fi
fun()
{
if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ]
then echo "Pass ($1, $#)"
else echo "Fail ($1, $#)"
fi
}
fun $HOME
fun $HOME abc
fun $HOME/xyz abc
fun /dev/null
if [[ $# == 1 && -d "$1" ]]; then
echo "one param, first is a dir"
elif [[ $# == 2 && ! -d "$1" ]]; then
echo "two params, first is not a dir"
else
echo "unexpected"
fi