我很難搞清楚如何做到這一點,如果語句。我想這樣做:如何使這個if語句在shell中
IF(函數只有1個參數 和$ 1是一個目錄(在當前 文件夾)),或者如果(函數有2個 參數和$ 1不是一個目錄) THEN
....
END
很抱歉,如果它不是很清楚,
謝謝S IN提前
我很難搞清楚如何做到這一點,如果語句。我想這樣做:如何使這個if語句在shell中
IF(函數只有1個參數 和$ 1是一個目錄(在當前 文件夾)),或者如果(函數有2個 參數和$ 1不是一個目錄) THEN
....
END
很抱歉,如果它不是很清楚,
謝謝S IN提前
你幾乎說的話,需要在這樣的問題:
if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ]
then
...
fi
您可以使用其他運營商太 - 將在Bourne shell的工作,更不用說光輝或其他POSIX殼(假設$ #在一個函數中工作正常 - 它在Bash中工作)。
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
我相信OP希望「或」而不是「elif」。 – 2010-01-17 15:47:18
這可能要在每種情況下做一些(略微)不同的事情,這在示例中顯示。 – 2010-01-17 15:55:22
注意,您可以使用 '-o' 操作測試( '[')內置;長期(但不一定相關)的建議是不要試圖搞亂'-a'和'-o'(或者甚至用'-a'或'-o')。做的事情如圖所示是可靠的,避免了需要擺脫括號(括號)等。 – 2010-01-17 15:41:35
謝謝你,它的作品就像一個魅力! – Selmak 2010-01-17 15:53:54