Viết kịch bản có lập luận?


11

Tôi muốn viết kịch bản shell lấy một đối số và sau đó áp dụng nó cho các tệp.

Cụ thể, tôi muốn đưa ra một thuật ngữ và sau đó biên dịch thuật ngữ đó với mxmlc ("mxmlc term.as"), sau đó chạy term.swf với flashplayerdebugger ("flashplayerdebugger term.swf"). Tôi còn khá mới với kịch bản shell - bạn có suy nghĩ gì không?


$2là đối số $3thứ nhất, thứ hai, v.v. $1được dành riêng cho tên của tập tin. Đối với những thứ khác, tôi không hiểu ý của bạn. Bạn có thể vui lòng cố gắng giải thích nó tốt hơn một chút hoặc viết một số psuedocode?
bốn giờ

1
@InkBlend bạn tắt một cái. "$1"là đối số đầu tiên.
geirha

@geirha: Ouch. Đau đấy. Bạn nói đúng, tất nhiên. Ngớ ngẩn với tôi, tôi đã phải nghĩ về Python.
bốn giờ

Câu trả lời:


19

Bạn có thể sử dụng một cái gì đó như thế này:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc $NAME.as
flashplayerdebugger $NAME.swf

1
Hoặc bỏ qua NAMEbiến hoàn toàn và chỉ sử dụng mxmlc "$1".asflashplayerdebugger "$1".swf. (Trích dẫn có thể nằm trong biểu thức.)
Eliah Kagan

Nhưng nếu param chứa khoảng trắng thì sao?
Dawid

Bạn khá đúng. Tôi đã chỉnh sửa nhận xét của mình để sửa lỗi này.
Eliah Kagan

@shinnra Nếu tham số chứa khoảng trắng, sau đó nxmlcflashplayerdebuggersẽ nhận được nhiều đối số thay vì đối số dự định. Việc mở rộng NAMEcần phải được trích dẫn kép. Mặt khác, không sử dụng tất cả các tên biến chữ hoa; bạn có nguy cơ ghi đè các biến shell đặc biệt hoặc biến môi trường.
geirha

4

Tôi cũng khuyên bạn nên sử dụng dấu phân cách tên biến. Vì vậy, mã sẽ trông như sau:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc ${NAME}.as
flashplayerdebugger ${NAME}.sw

Điều này cho phép sử dụng biến trong bất kỳ ngữ cảnh nào, ngay cả trong văn bản khác. Ví dụ:

NewName="myFileIs${NAME}and that is all"

Điều này sẽ mở rộng TÊN biến được đặt ở phía trước bởi "myFileIs" và ở phía sau với "và đó là tất cả" Biến sẽ mở rộng, bao gồm các khoảng trắng, bên trong chuỗi. nếu NAME "ở trong đây" thì NewName sẽ là "myFileIsinside và đây là tất cả".

Dòng lệnh có thể mất tới 9 biến. Chúng có thể được trích dẫn các chuỗi có khoảng trống, mỗi chuỗi được trích dẫn được tính là một biến. Nhu la:

./myProg var1 var 2 var3

Vì vậy, ${1}"var1", ${2}"var", ${3}"2", ${4}"var3"

NHƯNG: ./myProg var1 "var 2" var3

${1}được "var1", ${2}"var 2", ${3}được"var3"

Chúc vui vẻ!

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.