我正在使用bash編寫腳本。它會收到2到5個參數。例如:檢查參數是否爲路徑
./foo.sh -n -v SomeString Type Directory
-n,-v和目錄都是可選的。 如果腳本沒有收到參數目錄,它將在當前目錄中搜索一個字符串。否則它會按照接收到的路徑在那裏搜索。如果這個目錄不存在,它會發送一條消息。
問題是:有沒有辦法檢查最後一個參數是否是路徑?
我正在使用bash編寫腳本。它會收到2到5個參數。例如:檢查參數是否爲路徑
./foo.sh -n -v SomeString Type Directory
-n,-v和目錄都是可選的。 如果腳本沒有收到參數目錄,它將在當前目錄中搜索一個字符串。否則它會按照接收到的路徑在那裏搜索。如果這個目錄不存在,它會發送一條消息。
問題是:有沒有辦法檢查最後一個參數是否是路徑?
你可以使用變量引用最後一個參數:
numArgs=$#
lastArg="${!numArgs}"
# check if last argument is directory
if [[ -d "$lastArg" ]]; then
echo "it is a directory"
else
echo "it is not a directory"
fi
如果最後的參數不是路徑會怎麼樣?正如我所說,目錄是可選參數。 – user1872329
請參閱編輯部分,您在其他塊中處理該情況。 – anubhava
好的。如果用戶不確定要搜索的目錄,最後一個參數將是類型(例如「* .txt」)。輸出將是「它不是一個目錄」,對嗎? – user1872329
您可以使用此:
#!/bin/bash
if [[ -d ${!#} ]]
then
echo "DIR EXISTS"
else
echo "dosen't exists"
fi
首先,使用getopts
解析選項-n
和-v
(他們將不得不在任何非選項之前使用,但這通常不是問題)。現在
while getopts nv opt; do
case $opt in
n) nflag=1 ;;
v) vflag=1 ;;
*) printf >&2 "Unrecognized option $opt\n"; exit 1 ;;
esac
done
shift $((OPTIND-1))
,你將有隻有你的兩個參數,並可能你的第三個可選參數,在[email protected]
。
string_arg=$1
type_arg=$2
dir_arg=$3
if [ -d "$dir_arg" ]; then
# Do something with valid directory
fi
請注意,此代碼可以在任何POSIX兼容的shell中運行,而不僅僅是bash
。
是的,但我需要知道,如果最後的參數是一個路徑。如果不是,腳本將在當前目錄中搜索。如果是,但不存在,腳本會向stderr發送消息。 – user1872329