Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在shell中生成此if语句_Shell_If Statement - Fatal编程技术网

如何在shell中生成此if语句

如何在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语句。我想这样做:

IF(函数只有一个参数 $1是一个目录(在当前 文件夹)或IF(函数有2个 参数和$1不是目录)然后

结束

对不起,如果不是很清楚


提前感谢

您已经说了问题中需要的内容:

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