2017-09-20 11 views
0

私は、コマンドラインからパラメータを読み込み、ケースパラメータがない場合に終了するUnixシェルスクリプトを持っています。次に、うまく動作するはずのパラメータでテストしましたが、エラーで終了します。 誰でも確認できますか?パラメータControl - Bash

SCRIPT:

#!/bin/ksh 
########################################################################## 
#  Remote to upstream servers to check feed files without password # 
#    ELLA YE             # 
#    Sept 20 2017            # 
#    Version 1            # 
########################################################################## 

RUNDIR=/tmp 
UPSTREAM_USER="$1" 
UPSTREAM_SERVER=$2 
UPSTREAM_DIR=$3 
FILE_NAME=$4 
LOCAL_DIR=$5 

echo $5 
#if [[ ("$1" = "") || ("$2 = "") || ("$3" = "") || ("$4" = "") || ("$5 = "") ]] 
if [ $5 -eq "" ]; 
then 
     echo "Parameter missing" 
exit 1; 
fi 

私のコマンド:

./sftpupstream.ksh abc abc.wlb2.nam.nsroot.net . .profile . 

結果:エラーメッセージは何

. 
Parameter missing 
bash-4.1$ 
+1

の外に欠けている数学と出力を行います引数リストにカウントされません必要があります。 so [$#-eq 5] – Rob

+0

シバン線はインタープリターとして 'bash'ではなく' ksh'を表します。 Kornシェルスクリプトでbash-only拡張を使用することはできません。 –

答えて

-1

私の盲目の推測はあなたのヴァースを引用符で囲みます。 「$ 5」

0

私はあなたが「$ 5」の展開がヌル文字列であるかどうかをテストします

if [ -z "$5" ] 
    then 
    echo "Parameter missing" 
    exit 1 
fi 

-zスイッチを探していると思います。 NULL文字列の場合は、本体が実行されます。

は、スクリプトの先頭にこれを入れて、この question

0

を参照してください。

#!/bin/ksh 
if [ $# -ne 5 ]; then 
     echo "$((5 - $#)) parameter(s) missing" 
     exit 1 
    else 
     # You code 
    fi 

$#リターンはスクリプトに渡されたパラメータの数、5に異なる場合、スクリプトが終了しますので。

echo "$((5 - $#))"は私だけでは$#は、あなたが希望のサイズ:)空の文字列であるテストする方法を多くのパラメータが5