Menulis skrip dengan argumen?

11

Saya ingin menulis skrip shell yang mengambil argumen, dan kemudian menerapkannya pada file.

Secara khusus, saya ingin memberikan sebuah term, dan kemudian mengkompilasinya term.as dengan mxmlc ("mxmlc term.as"), kemudian jalankan term.swf dengan flashplayerdebugger ("flashplayerdebugger term.swf"). Saya cukup baru di shell scripting - ada pemikiran?

southpointingchariot
sumber
$2adalah argumen pertama, $3kedua, dan seterusnya. $1dicadangkan untuk nama file. Adapun hal-hal lain, saya tidak mengerti apa yang Anda maksud. Bisakah Anda mencoba menjelaskannya sedikit lebih baik atau menulis beberapa kode kode?
Fouric
1
@InkBlend Anda keluar satu per satu. "$1"adalah argumen pertama.
geirha
@geirha: Aduh. Itu menyakitkan. Kamu benar, tentu saja. Konyol saya, saya pasti memikirkan Python.
Fouric

Jawaban:

19

Anda dapat menggunakan sesuatu seperti ini:

#!/bin/sh
# $0 is the script name, $1 id the first ARG, $2 is second...
NAME="$1"
mxmlc $NAME.as
flashplayerdebugger $NAME.swf
Dawid
sumber
1
Atau melewatkan NAMEvariabel sama sekali dan hanya menggunakan mxmlc "$1".asdan flashplayerdebugger "$1".swf. (Kutipan bisa di dalam ekspresi.)
Eliah Kagan
tetapi bagaimana jika param berisi spasi?
Dawid
Anda benar. Saya telah mengedit komentar saya untuk memperbaiki kesalahan ini.
Eliah Kagan
@shinnra Jika parameter berisi spasi, maka nxmlcdan flashplayerdebuggerakan mendapatkan beberapa argumen, bukan satu argumen yang dimaksudkan. Perluasan NAMEperlu dikutip ganda. Di samping catatan, jangan gunakan semua nama variabel huruf besar; Anda berisiko menimpa variabel shell khusus atau variabel lingkungan.
geirha
4

Saya juga menyarankan Anda menggunakan pembatas nama variabel. Jadi kodenya akan terlihat seperti:

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

Ini memungkinkan penggunaan variabel dalam konteks apa pun, bahkan di dalam teks lain. Sebagai contoh:

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

Ini akan memperluas variabel NAME yang akan diapit di depan oleh "myFileIs" dan di bagian belakang dengan "dan itu saja" Variabel akan diperluas, spasi termasuk, di dalam string. jika NAME "di dalam sini" NewName akan menjadi "myFileIsinside hereand itu saja".

Baris perintah dapat memakan waktu hingga 9 variabel. Mereka dapat dikutip string yang berisi kosong, setiap string yang dikutip dihitung sebagai variabel. Seperti:

./myProg var1 var 2 var3

Begitu ${1}juga "var1", ${2}adalah "var", ${3}adalah "2", ${4}adalah"var3"

TAPI: ./myProg var1 "var 2" var3

memiliki ${1}adalah "var1", ${2}adalah "var 2", ${3}adalah"var3"

Selamat bersenang-senang!

Hai, Gary
sumber