2013-09-01 69 views
-1

我在進入shell腳本的過程中遇到了第二個障礙。我似乎無法讓我的if語句爲空值評估爲true。我正在嘗試將參數傳遞給腳本,並讓腳本告訴我是否缺少所需的變量。不幸的是,它不斷下降到else語句,儘管它應該將變量評估爲空值。下面是該腳本:Bash腳本如果爲空,則爲true false

if [ "$1" == "d" ]; then 

     if [ -n "$2" ]; then 
      echo "Please enter the local location of the files" 
     else 
      LOCAL=$2 
      scp -r -i ~/Dropbox/Business/aws/first.pem $LOCAL [email protected]:~/test/ 
     fi 

    else 
     scp -r -i ~/Dropbox/Business/aws/first.pem ~/Dropbox/Business/aws/files/binaryhustle/ [email protected]:~/test/ 
    fi 

下面是我正在執行腳本的命令:'bash的copyfile.sh d

我得到的迴應是:

usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[[email protected]]host1:]file1 ... [[[email protected]]host2:]file2 `

+5

''-n''表示長度不爲零。你的意思是''-z''?同樣使用正確的shebang而不是用bash執行這個腳本。不要忘記''''是''test''命令,你可以在bash中使用'[[]]''。 –

+0

@ Melbourne2991而且就像我之前說過的,請引用你的變量('「$ LOCAL」')。如果'LOCAL'獲得一個有空格的值,那麼你的命令將會運行一個錯誤。 – konsolebox

+0

非常感謝,當你說使用正確的shebang時,你的意思是腳本的第一行應該有shell的位置。也是我寫的bash代碼的代碼?或shell代碼,不太確定:O。謝謝! – Melbourne2991

回答

0

總結評論,附加功能以消除代碼重複:

#!/bin/bash 

keyfile=~/Dropbox/Business/aws/first.pem 
[email protected]:~/test/ 
default_source=~/Dropbox/Business/aws/files/binaryhustle/ 

do_copy() { 
    source=$1 
    scp -r -i $keyfile "$source" "$destination" 
} 

if [ "$1" == "d" ]; then 
    if [ -z "$2" ]; then 
     echo "Please enter the local location of the files" 
    else 
     do_copy "$2" 
    fi 
else 
    do_copy "$default_source" 
fi 
相關問題