2013-05-01 40 views
15

Tôi có tập lệnh có nhiều tệp đầu vào, thường là các tệp mặc định được lưu trữ ở vị trí chuẩn và được gọi bởi tập lệnh.đối số dòng lệnh bash thay thế giá trị mặc định cho các biến

Tuy nhiên đôi khi cần phải chạy nó với các yếu tố đầu vào đã thay đổi.

Trong tập lệnh, tôi hiện có 3 biến $ A $ B và $ C, bây giờ tôi muốn chạy nó với $ B không mặc định, ngày mai tôi có thể chạy nó với $ A và $ B không mặc định .

Tôi đã có một cái nhìn xung quanh như thế nào để phân tích đối số dòng lệnh: How do I parse command line arguments in Bash?

Nhưng tôi không chắc chắn làm thế nào để đối phó với việc có một số thiết lập bởi dòng lệnh aruguments một số thời gian?

Tôi không có đủ đại diện để trả lời câu hỏi của riêng tôi tuy nhiên tôi có một giải pháp:

https://stackoverflow.com/a/4610469/2339623

#!/bin/bash 
a=input1 
b=input2 
c=input3 
while getopts "a:b:c:" flag 
do 
    case $flag in 
     a) a=$OPTARG;; 
     b) b=$OPTARG;; 
     c) c=$OPTARG;; 
    esac 
done 

Xin lỗi tôi rõ ràng đã không tìm kiếm như triệt để như tôi nghĩ ...

+4

Bạn có thể sử dụng 'getopts' cho mục đích này. Có rất nhiều hướng dẫn, một cái gì đó như http://aplawrence.com/Unix/getopts.html có thể hữu ích cho một sự khởi đầu. – fedorqui

+0

Cảm ơn, tôi đã thấy điều này trên các câu hỏi tôi đã liên kết. Tôi đã tự hỏi nếu có một số cách tiêu chuẩn để có đối số lệnh ghi đè lên các biến. Ví dụ khi xác định các hàm trong python, bạn có thể đặt giá trị mặc định. Tôi có thể thấy rằng với một kiểm tra nếu tôi có thể thay thế mặc định bằng đối số dòng lệnh, nhưng không chắc chắn nếu có một cách tiêu chuẩn để làm điều này? – Lanrest

Trả lời

6

Thay vì sử dụng các đối số dòng lệnh để ghi đè các giá trị mặc định, bạn cũng có thể đặt các biến bên ngoài tập lệnh. Ví dụ đoạn mã sau đây có thể được gọi với foo=54 /tmp/foobar hoặc bar=/var/tmp /tmp/foobar:

#! /bin/bash 
: ${foo:=42} 
: ${bar:=/tmp} 
echo "foo=$foo bar=$bar" 
+0

Tôi nghĩ về điều này, tuy nhiên kịch bản tôi đang chỉnh sửa là dành cho những người thậm chí còn ít quen thuộc hơn bản thân tôi. Tôi muốn làm cho nó đơn giản nhất có thể, và tôi nghĩ rằng các đối số dòng lệnh là một nơi mà họ quen thuộc hơn. – Lanrest

35

Bạn có thể làm theo cách này, xem Shell Parameter Expansion trong bash người đàn ông trang

#! /bin/bash 

value=${1:-the default value} 
echo value=$value 

Trên dòng lệnh:

$ ./myscript.sh 
value=the default value 
$ ./myscript.sh foobar 
value=foobar 
Các vấn đề liên quan