Kiểm tra số lượng đối số chính xác


147

Làm thế nào để tôi kiểm tra đúng số lượng đối số (một đối số). Nếu ai đó cố gắng gọi tập lệnh mà không chuyển đúng số lượng đối số và kiểm tra để đảm bảo đối số dòng lệnh thực sự tồn tại và là một thư mục.


5
@Daniel shellcó nghĩa là/bin/sh
Ruel

Câu trả lời:


215
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi

Dịch: Nếu số lượng đối số không (bằng số) bằng 1 hoặc đối số đầu tiên không phải là một thư mục, sử dụng đầu ra cho thiết bị lỗi chuẩn và thoát với mã trạng thái lỗi.

Báo cáo lỗi thân thiện hơn:

#!/bin/sh
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi
if ! [ -e "$1" ]; then
  echo "$1 not found" >&2
  exit 1
fi
if ! [ -d "$1" ]; then
  echo "$1 not a directory" >&2
  exit 1
fi

1
@Andrew K: dòng nào được báo cáo này? Nếu đó là dòng "nếu", hãy thử cắt một trong hai mệnh đề làm cho nó if [ "$#" -ne 1 ] ; thenhoặc if ! [ -d "$1" ]; thenđể xem mệnh đề nào gây rắc rối.
Laurence Gonsalves

Tôi tìm ra nó cảm ơn bạn. Nếu tên tập tin không tồn tại thì sao?
Andrew K

Không tồn tại == không phải là một giám đốc như -dcó liên quan. Nếu bạn muốn thêm một kiểm tra riêng, bạn có thể sử dụng -eđể kiểm tra sự tồn tại.
Laurence Gonsalves

if [-e "$ 1"] sau đó lặp lại "$ 1: Không có thư mục như vậy" exit 1 fi
Andrew K

@Andrew K: bạn muốn đảo ngược kiểm tra. -etrả về true nếu tập tin tồn tại Tôi đã thêm báo cáo lỗi thân thiện hơn cho câu trả lời.
Laurence Gonsalves

22

kịch bản mèo.sh

    var1=$1
    var2=$2
    if [ "$#" -eq 2 ]
    then
            if [ -d $var1 ]
            then
            echo directory ${var1} exist
            else
            echo Directory ${var1} Does not exists
            fi
            if [ -d $var2 ]
            then
            echo directory ${var2} exist
            else
            echo Directory ${var2} Does not exists
            fi
    else
    echo "Arguments are not equals to 2"
    exit 1
    fi

thực hiện nó như dưới đây -

./script.sh directory1 directory2

Đầu ra sẽ như thế nào -

directory1 exit
directory2 Does not exists

14

Bạn có thể kiểm tra tổng số đối số được truyền trong dòng lệnh bằng " $#" Nói ví dụ: tên tập lệnh shell của tôi làhello.sh

sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument 
if [ $# -eq 1 ] 
then
    echo $1
else
    echo "invalid argument please pass only one argument "
fi

Đầu ra sẽ là hello-world

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.