Linux

Linux shell 腳本“沒有這樣的文件或目錄”

  • August 17, 2016

我創建了一個 shell 腳本來完成 3 個簡單的任務(壓縮目錄、重命名最終文件並刪除源目錄)。腳本源碼如下:

#!/bin/bash
if [[ $2 == *"/data/"* ]]
then
   src= $2"/*";
   dest= $1".zip";

   # Just for test
   echo $src;

   # Commented for now
   #zip -r -j $dest $src
   #mv $dest $1
   #rm -rf $2
else
   echo "Invalid arguments";
fi

當我使用這些參數執行上面的腳本時,出現錯誤:

./scriptzip.sh /data/file-new /data/file-old

./scriptzip.sh: line 4: /data/file-old/*: No such file or directory
./scriptzip.sh: line 5: /data/file-new.zip: No such file or directory

如何防止 shell 為“類似目錄”的字元串測試變數?有什麼辦法可以跳過嗎?

空間在 shell 中很重要,因為這就是在命令中劃分標記的原因,例如echo foo baror更糟rm -rf /some/where /。因此,賦值不能在 : 周圍包含空格=

foo=/etc/*
echo $foo

變數可能還需要引用,具體取決於您希望在此處進行全域擴展和分詞(不正確的分詞rm可能導致意外(和搞笑)文件系統清理)。

echo "$foo"

引用自:https://serverfault.com/questions/797379