檢查 bash 腳本是否有兩個參數,即目錄

檢查 bash 腳本是否有兩個參數,即目錄

我正在編寫一個比較兩個目錄的 bash 腳本,但我不確定如何檢查條件

例如,如果使用者輸入 1 arg 而不是 2(我們需要 2,因為我們正在比較兩個目錄),則應該給出錯誤。如果兩個 arg 都有效,則比較目錄並輸出到檔案。

答案1

處理參數

處理透過腳本命令列傳遞的參數非常簡單,如下所示。假設我們有這個腳本:

$ cat cmd.bash 
#!/bin/bash

echo "arg1: $1"
echo "arg2: $2"

現在不帶參數運行:

$ ./cmd.bash 
arg1: 
arg2: 

有 1 個參數:

$ ./cmd.bash hi
arg1: hi
arg2: 

有 2 個參數:

$ ./cmd.bash hi bye
arg1: hi
arg2: bye

檢查參數

然後,您可以檢查參數 1 和 2 是否為有效目錄,然後根據需要退出或繼續。因此,我們引入 2 個檢查來查看 2 個參數是否是目錄,如果不是就退出。

$ cat cmd.bash
#!/bin/bash

[ -d "$1" ] || exit
[ -d "$2" ] || exit
[ $# == 2 ] || exit

echo "arg1: $1"
echo "arg2: $2"

例子

假設我們有這些目錄。

$ mkdir d1 d2

$ ls -l
total 12
-rwxrwxr-x. 1 saml saml   89 Oct 14 23:13 cmd.bash
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d1
drwxrwxr-x. 2 saml saml 4096 Oct 14 23:14 d2

如果給我們的不是 2 個目錄,腳本就會直接退出。

$ ./cmd.bash hi bye

如果我們有 2 個目錄:

$ ./cmd.bash d1 d2
arg1: d1
arg2: d2

如果我們給兩個以上的參數:

$ ./cmd.bash d1 d2 d3

我將把這兩個目錄的比較留給你。為了學習 Bash,我會引導您訪問下面的鏈接,獲取有關 Bash 的免費線上書籍。

參考

答案2

參數的數量在範圍$#

if [ $# -ne 2 ]; then
  echo 1>&2 "Usage: $0 DIRECTORY1 DIRECTORY2"
  exit 3
fi

如果您想強制參數都是目錄(而不是其他類型的檔案),請使用-d

實用性diff比較兩個檔案。使用選項-r,它會遞歸地比較目錄。

diff -ru -- "$1" "$2"

相關內容