กำลังเขียนสคริปต์ด้วยข้อโต้แย้ง?


11

ฉันต้องการเขียนเชลล์สคริปต์ที่รับอาร์กิวเมนต์แล้วนำไปใช้กับไฟล์

โดยเฉพาะฉันต้องการที่จะให้คำแล้วมีมัน term.as รวบรวมกับ mxmlc ("mxmlc term.as") จากนั้นเรียกใช้ term.swf กับ flashplayerdebugger ("flashplayerdebugger term.swf") ฉันค่อนข้างใหม่ในการเขียนสคริปต์ shell - ความคิดใด ๆ


$2คืออาร์กิวเมนต์แรก$3อันดับที่สองเป็นต้น $1สงวนไว้สำหรับชื่อไฟล์ สำหรับสิ่งอื่น ๆ ฉันไม่เข้าใจความหมายของคุณ คุณกรุณาอธิบายให้ดีขึ้นหน่อยหรือเขียนรหัสบางอย่างได้ไหม
fouric

1
@InkBlend คุณเป็นหนึ่งเดียว "$1"เป็นอาร์กิวเมนต์แรก
geirha

@geirha: Ouch ที่เจ็บ แน่นอนว่าคุณพูดถูก Silly ฉันฉันต้องคิด Python
fouric

คำตอบ:


19

คุณสามารถใช้สิ่งนี้:

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

1
หรือข้ามNAMEตัวแปรทั้งหมดและเพียงแค่ใช้และmxmlc "$1".as flashplayerdebugger "$1".swf(คำพูดสามารถแสดงออกได้)
Eliah Kagan

แต่จะเกิดอะไรขึ้นถ้าพารามิเตอร์มีช่องว่าง
Dawid

คุณพูดถูก ฉันแก้ไขความคิดเห็นของฉันเพื่อแก้ไขข้อผิดพลาดนี้
Eliah Kagan

@shinnra หากพารามิเตอร์มีช่องว่างแล้วnxmlcและflashplayerdebuggerจะได้รับหลายอาร์กิวเมนต์แทนที่จะเป็นหนึ่งอาร์กิวเมนต์ที่ตั้งใจไว้ การขยายตัวของNAMEความต้องการที่จะยกมาเป็นสองเท่า ในบันทึกย่อด้านอย่าใช้ชื่อตัวแปรตัวพิมพ์ใหญ่ทั้งหมด คุณเสี่ยงที่จะเขียนทับตัวแปรเชลล์พิเศษหรือตัวแปรสภาพแวดล้อม
geirha

4

ฉันขอแนะนำให้คุณใช้ตัวคั่นชื่อตัวแปร ดังนั้นรหัสจะมีลักษณะดังนี้:

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

สิ่งนี้อนุญาตให้ใช้ตัวแปรในบริบทใด ๆ แม้แต่ในข้อความอื่น ตัวอย่างเช่น:

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

นี่จะขยายตัวแปร NAME ซึ่งจะถูกขนาบข้างด้วย "myFileIs" และที่ด้านหลังด้วย "และนั่นคือทั้งหมด" ตัวแปรจะขยายช่องว่างรวมอยู่ภายในสตริง ถ้า NAME คือ "ข้างในที่นี่" NewName จะเป็น "myFileIsinside ที่นี่และนั่นคือทั้งหมด"

บรรทัดคำสั่งสามารถรับตัวแปรได้สูงสุด 9 ตัว พวกเขาสามารถเป็นสตริงที่ยกมาซึ่งมีช่องว่างแต่ละสตริงที่ยกมานับเป็นตัวแปร เช่น:

./myProg var1 var 2 var3

ดังนั้น${1}เป็น"var1", ${2}ถูก"var", ${3}ถูก"2", ${4}ถูก"var3"

แต่: ./myProg var1 "var 2" var3

มี${1}เป็น"var1", ${2}คือ"var 2", ${3}เป็น"var3"

มีความสุข!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.