我正在編寫一個比較兩個目錄的 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 的免費線上書籍。