2009-03-26 38 views
22

Có quy ước cho việc ghi lại các tham số của tập lệnh shell không?tham số của tài liệu shell script '

Ví dụ:

#!/usr/bin/env bash 

# <description> 
# 
# Usage: 
# $ ./myScript param1 [param2] 
# * param1: <description> 
# * param2: <description> 

Một vài điều tôi không thích về mẫu cụ thể này:

  • tên file của kịch bản (myScript) xuất hiện trong tập tin tự mô tả
  • tham số có vẻ lạ
  • không gian hàng đầu trước $ hữu ích trực quan nhưng có thể dẫn đến nhầm lẫn bằng ngôn ngữ với nhận xét chặn, khiến một số công cụ xác thực khiếu nại về sự thụt lề hỗn hợp/không nhất quán (ví dụ: các khoảng trống trong khối này, các tab cho mã - miễn là một tab thích các tab, tất nhiên)

Có bất kỳ hướng dẫn nào về điều này không?

+0

trang 'man' để định dạng và ví dụ về tài liệu tham số: https://unix.stackexchange.com/questions/6891/how-can-i-add-man-page-entries-for-my-own-power -tools –

Trả lời

3

Tôi thà viết:

Usage: `basename $0` [option1]|[option2] param1 
    Options: 
    - option1: ..... 
    - option2: ..... 
    Parameters: 
    - param1: ..... 

Cố gắng nhìn vào cách giúp đỡ được định dạng cho các tiện ích UNIX chuẩn (ls --help, ví dụ)

2

Tôi muốn giới thiệu làm cho kịch bản của bạn sẽ tự động in sử dụng (nếu nó không nên chạy mà không có đối số):

#!/usr/bin/env bash 

if [ ${#@} == 0 ]; then 
    echo "Usage: $0 param1 [param2]" 
    echo "* param1: <description>" 
    echo "* param2: <description>" 
fi 
+3

Bạn có thể sử dụng '$ #' làm lối tắt cho số đối số. –

7

Các Vim bash IDE mà thực hiện điều này:

#!/bin/bash 
#=============================================================================== 
# 
#   FILE: test.sh 
# 
#   USAGE: ./test.sh 
# 
# DESCRIPTION: 
# 
#  OPTIONS: --- 
# REQUIREMENTS: --- 
#   BUGS: --- 
#   NOTES: --- 
#  AUTHOR: Joe Brockmeier, [email protected] 
#  COMPANY: Dissociated Press 
#  VERSION: 1.0 
#  CREATED: 05/25/2007 10:31:01 PM MDT 
#  REVISION: --- 
#=============================================================================== 
+7

Ugh, trông giống như phần nhận dạng của chương trình COBOL. * run rẩy *. – ashawley

+1

Điều đó có vẻ thú vị - sẽ xem xét điều đó, cảm ơn! (Mặc dù vấn đề với nhận xét nhiều dòng - như trong heredoc - vẫn còn.) – AnC

+0

Tôi luôn sử dụng "#:" cho _meta-comments_ này để tôi có thể tách chúng ra khỏi các nhận xét thực hiện. – leogtzr

11

Tôi thường quấn sử dụng của tôi trong chức năng vì vậy tôi có thể gọi nó từ một -h param, vv

#!/bin/bash 
usage() { 
    cat <<EOM 
    Usage: 
    $(basename $0) Explain options here 

EOM 
    exit 0 
} 

[ -z $1 ] && { usage; } 
+0

Tôi đã sửa tài liệu tại đây cho bạn bằng cách thụt lề tập lệnh. Tôi không hiểu [-x $ 1] (nếu đối số đầu tiên không phải là đường dẫn đến một tệp thi hành, hãy sử dụng cách sử dụng?); các dấu ngoặc và dấu chấm phẩy xung quanh lời gọi cũng thừa. –

+0

Doh, không chú ý đến x; thay đổi nó thành z nó muốn được. – Eddy

+0

Tôi đoán niềng răng là thói quen để tôi có thể bao gồm một thông báo lỗi cùng với kiểm tra tùy thuộc vào kiểm tra. Cảm ơn bạn đã lừa mã lừa đảo! – Eddy

22

Thông thường bạn đối tài liệu của bạn trong việc sử dụng() chức năng:

#!/bin/bash 

programname=$0 

function usage { 
    echo "usage: $programname [-abch] [-f infile] [-o outfile]" 
    echo " -a  turn on feature a" 
    echo " -b  turn on feature b" 
    echo " -c  turn on feature c" 
    echo " -h  display help" 
    echo " -f infile specify input file infile" 
    echo " -o outfile specify output file outfile" 
    exit 1 
} 

usage 
+1

Cảm ơn mọi người đã trả lời. Mặc dù tất cả chúng đều khá cụ thể, nhưng chúng vẫn hữu ích. Tôi sẽ phải suy nghĩ về cách tốt nhất để thực hiện điều này (như là một mô hình phổ biến) trong Python, Perl, Ruby, vv – AnC

+0

Có suy nghĩ về điều này nhiều hơn một chút, các tài liệu trong mã là cần thiết là tốt, vì nó phục vụ một mục đích hơi khác nhau. Vì vậy, tôi sẽ áp dụng thông tin sử dụng tự động, nhưng vẫn đánh giá cao một số lời khuyên về vấn đề ban đầu. – AnC

4

Tôi sẽ recomment bằng cách sử dụng một heredoc:

usage() { 
    cat <<HELP_USAGE 

    $0 [-a] -f <file> 

    -a All the instances. 
    -f File to write all the log lines 
HELP_USAGE 
} 

thay vì:

echo "$0 [-a] -f <file>" 
echo 
echo "-a All the instances." 
echo "-f File to write all the log lines." 

Tôi nghĩ nó sạch hơn tất cả các dòng echo.

Các vấn đề liên quan