2015-02-06 187 views
1

我寫了這段代碼將一個目錄移動到另一個。 我想要的代碼如下:如何將默認值傳遞給shell腳本中的變量?

  1. 用戶將給出一個文件名或目錄名。
  2. 用戶可以給一個目標文件夾。如果用戶不需要目的地文件夾,他/她只需按下輸入鍵。
  3. 然後源目錄將被複制到目的地目錄(如果給定)或默認的目錄(如果沒有給定目的地)

下面是代碼。

$source_folder 
$destination_folder 
$destination 
read -r directory_source 
read -r destination_folder 
if [ "$destination_folder" = ""] 
then 
    $destination = "/var/www/html/" 
else 
    $destination = "$destination_folder" 
fi 
cp -a "$source_folder" "$destination" 

這裏是輸入到該程序:

Myfiles.sh (called the shell script in terminal) 
Max Sum (This is the source directory) 
(Pressed enter i.e. No destination given) 

它提供了以下錯誤:

/usr/local/myfiles/copyDirToHTML.sh: line 6: [: : unary operator expected 
/usr/local/myfiles/copyDirToHTML.sh: line 10: =: command not found 
cp: cannot stat ‘’: No such file or directory 
+0

是什麼問題? – Prashant 2015-02-06 08:58:22

+1

需要交互式輸入的腳本不太有用,因爲它們不能作爲構建塊併入較大的腳本中,並且會放棄shell等有用的交互功能,例如製表符擴展等。一個明智的'cpd'(用於默認複製)將是簡單爲'cpd(){cp「$ 1」「$ {2-/path/to/default}」; }' – tripleee 2015-02-07 07:37:34

+0

謝謝,我只是在學習。將嘗試你的解決方案。 @tripleee – InsomniacSabbir 2015-02-07 13:17:31

回答

1

解決您的問題

變化

if [ "$destination_folder" = ""] 

if [ "$destination_folder" = "" ] 

,改變read -r directory_source

read -r source_folder 

您也可以使用下面的腳本。從cmd行傳遞參數

#!/bin/sh 
source_folder=$1 

if [ $# -eq 2 ]; then 
    destination=$2 
else 
    destination="/var/www/html/" 
fi 

cp -a "$source_folder" "$destination" 

其中$#是腳本的參數數量。
$ 1 - 「第一個參數......類似的2 $ ..

運行

./script.sh source_folder [destination] 

目的地是可選

+0

我遵循你給出的第一條指示。在if語句中的「]」前加上一個空格。但是在給目的地什麼都不給的情況下會引發以下錯誤。 「/usr/local/myfiles/copyDirToHTML.sh:第8行:=未找到命令 cp:can stat'':沒有這樣的文件或目錄」 – InsomniacSabbir 2015-02-06 09:09:34

+1

已完成更改。檢查編輯 – 2015-02-06 09:33:22

+0

謝謝,明白了。儘管我的代碼也遇到了問題。並添加到下面。 – InsomniacSabbir 2015-02-06 11:04:02

0

我有一個辦法解決這個問題。 工作代碼是這樣的:

$source_folder 
$destination_folder 
read -r source_folder 
read -r destination_folder 
if [ "$destination_folder" = "" ]; then 
    sudo cp -a "$source_folder" "/var/www/html/" 
else 
    sudo cp -a "$source_folder" "$destination_folder" 
fi 
+0

腳本開始處的空變量插值不僅是多餘的,如果在腳本啓​​動時可以設置這些變量,它們可能會變成語法錯誤。 – tripleee 2015-02-07 07:30:25

相關問題