0

我知道類似的問題可能會被問到這一點,但我是一個shell腳本總新手&沒有找到幫助(可能是我無法理解的技術)。我有一個簡單的問題:檢查命令和驗證shell腳本的參數

我有一個簡單的腳本(testscript.sh),它需要3個參數&我使用的三個參數&運行它喜歡通過這些:(第一個參數是一個簡單的字符串,第二個是路徑文件名&第三是

./testscript.sh --para1 "somestring" --para2 "/home/android/test/abc.xml" --para3 "/home/android/outputfolder" 

現在我要檢查用戶是否已經給提供所有的REQD輸入值與合適的參數文件夾名稱)。我的意思是para3必須包含文件夾名稱,para2必須是文件名& para1必須是字符串或者它們以相同的順序出現。

另外我想驗證一件事:目前我期待用戶將輸入文件名「/home/android/test/abc.xml」包含在雙重qoutes,但如果用戶不包含它在雙倍報價&該文件夾/文件名中有一個空格,它會產生問題,因爲我無法獲得包括空格在內的完整文件/文件夾名稱,因此它正在中斷。

Plz help。感謝名單

回答

1

無法完全匹配,與我的要求,但它去通過這種方式工作:修改腳本運行的方式:

./testscript.sh -p "somestring" -i "/home/android/test/abc.xml" -o "/home/android/outputfolder" 

&在腳本中添加了如下檢查:

while getopts ":p:i:o:" opt; do 
    case $opt in 
    p) 
     if [ "$OPTARG" = "abc" ] || [ "$OPTARG" = "xyz" ]; then 
     somestring=$OPTARG 
     else 
     echo "Invalid parameter" >&2 
     usage 
     fi 
     ;; 
    i) 
     if [ -e $OPTARG ] && [ -f $OPTARG ]; then 
    input=$OPTARG 
     else 
     echo "Input file doest'nt exist " >&2 
     usage 
     fi 
     ;; 
    o) 
     if [ -e $OPTARG ]; then 
    ouput=$OPTARG 
     else 
     echo "Output folder doest'nt exist " >&2 
     usage 
     fi 
     ;; 
    \?) 
     echo "Invalid option: -$OPTARG" >&2 
     exit 1 
     ;; 
    :) 
     echo "Option -$OPTARG requires an argument." >&2 
     exit 1 
     ;; 
    esac 
done 

但仍然有人發現我的問題(與「 - para1」)的確切解決方案,歡迎答案!

2

這應該工作

#!/bin/sh 

usage() 
{ 
    echo "usage: $0 STRING FILE DIRECTORY" 
    exit 
} 

[ -n "$1" ] || usage 
[ -e "$2" ] || usage 
[ -d "$3" ] || usage 

ref

+0

感謝這個svnpenn,通過這個我可以檢查$ 2,$ 4&$ 6是否是字符串,文件和文件夾,但有沒有一種方法可以檢查值爲「--para1」是字符串,「--para2」是文件&&「--para1」是文件夾? – AndroidGuy