Apakah ada cara mudah untuk menyampaikan (menerima) parameter bernama ke skrip shell?
Sebagai contoh,
my_script -p_out '/some/path' -arg_1 '5'
Dan di dalam my_script.sh
menerima mereka sebagai:
# I believe this notation does not work, but is there anything close to it?
p_out=$ARGUMENTS['p_out']
arg1=$ARGUMENTS['arg_1']
printf "The Argument p_out is %s" "$p_out"
printf "The Argument arg_1 is %s" "$arg1"
Apakah ini mungkin di Bash atau Zsh?
bash
shell-script
zsh
arguments
Amelio Vazquez-Reina
sumber
sumber
Jawaban:
Sintaks yang mungkin paling dekat dengan itu adalah:
sumber
-k
opsi diatur dalam shell panggilan , makamy_script p_out='/some/path' arg_1='5'
memiliki efek yang sama. (Semua argumen dalam bentuk penugasan ditambahkan ke lingkungan, bukan hanya penugasan yang mendahului perintah.)x=42 echo $x; echo $x
Yang berarti dalam eksekusi selanjutnyamy_script
, jikap_out
dihilangkan, itu akan menempel pada nilai yang dilewati terakhir kali !! ('/some/path'
)unset
setelah eksekusi pertama, mengatur ulang sebelum eksekusi berikutnya?x=42 echo $x
bahkan tidak menghasilkan apa pun jika$x
tidak didefinisikan sebelumnya.Jika Anda tidak keberatan terbatas pada nama argumen satu-huruf yaitu
my_script -p '/some/path' -a5
, maka dalam bash Anda dapat menggunakan built-ingetopts
, misalnyaMaka Anda bisa melakukannya
Ada tutorial Getopts kecil yang membantu atau Anda bisa mengetikkan
help getopts
prompt shell.sumber
i
dand
). Ketika saya menjalankannya denganmy_script -i asd -d asd
saya mendapatkan string kosong untukd
argumen. Ketika saya menjalankannyamy_script -d asd -i asd
saya mendapatkan string kosong untuk kedua argumen.Saya mencuri ini dari drupal.org , tetapi Anda dapat melakukan sesuatu seperti ini:
Satu-satunya peringatan adalah bahwa Anda harus menggunakan sintaks
my_script --p_out=/some/path --arg_1=5
.sumber
-c|--condition)
Saya menggunakan skrip ini dan berfungsi seperti mantra:
Pemakaian
Hasil konsol:
STEPS dan REPOSITORY_NAME siap digunakan dalam skrip.
Tidak masalah urutan argumen apa.
sumber
Dengan
zsh
, Anda akan menggunakanzparseopts
:Tetapi Anda akan memanggil skrip dengan
myscript --p_out foo
.Catatan yang
zparseopts
tidak mendukung opsi penyingkat panjang atau--p_out=foo
sintaksis seperti GNUgetopt(3)
.sumber
[]
dalamnya adalah 2 tanda hubung? Tidak masuk akal!info zsh zparseopts
detailnyaSaya baru saja membuat naskah ini
berikan seperti
my_script --p_out /some/path --arg_1 5
dan kemudian dalam skrip yang dapat Anda gunakan$arg_1
dan$p_out
.sumber
v=``echo ${1} | awk '{print substr($1,3)}'`` typeset $v="$2"
(Hapus satu backtick masing-masing sisi)Jika suatu fungsi atau aplikasi memiliki lebih dari nol argumen, ia selalu memiliki argumen terakhir.
Jika Anda ingin membaca flag opsi dan pasangan nilai, seperti pada:
$ ./t.sh -o output -i input -l last
Dan Anda ingin menerima sejumlah variabel dari pasangan opsi / nilai,
Dan tidak ingin pohon "if .. then .. else .. fi" yang besar,
Kemudian setelah memeriksa jumlah argumen yang bukan nol dan genap,
Tulis loop sementara dengan keempat pernyataan eval ini sebagai badan, diikuti oleh pernyataan kasus menggunakan dua nilai yang ditentukan dalam setiap melewati loop.
Bagian rumit dari skrip ditunjukkan di sini:
sumber
Anda baru saja menyuntikkan parameter baris perintah di dalam lingkup skrip !!
sumber
-a 1 -b mitsos -c karamitsos