Saya ingin skrip saya dapat mengambil input opsional,
misalnya skrip saya saat ini
#!/bin/bash
somecommand foo
tapi saya ingin mengatakan:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Saya ingin skrip saya dapat mengambil input opsional,
misalnya skrip saya saat ini
#!/bin/bash
somecommand foo
tapi saya ingin mengatakan:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Jawaban:
Anda dapat menggunakan sintaks nilai default:
Akan di atas, seperti yang dijelaskan dalam Manual Referensi Bash - 3.5.3 Ekspansi Parameter Shell [penekanan tambang]:
Jika Anda hanya ingin mengganti nilai default jika parameter tidak disetel (tetapi tidak jika itu nol, misalnya tidak jika itu adalah string kosong), gunakan sintaks ini sebagai gantinya:
Lagi dari Bash Reference Manual - 3.5.3 Ekspansi Parameter Shell :
sumber
foo
jika$1
tidak disetel atau string kosong ", dan${1-foo}
, "kembalifoo
jika$1
tidak disetel".Anda dapat menetapkan nilai default untuk variabel seperti:
somecommand.sh
Berikut ini beberapa contoh cara kerjanya:
sumber
-
bingung (apakah dinegasikan?).sumber
-n
sama dengan! -z
.-n
dan! -z
jadi saya akan mengatakan itu tidak terjadi di sini.[ -n $1 ]
akan selalu benar . Jika Anda menggunakan bash,[[ -n $1 ]]
akan berperilaku seperti yang Anda harapkan, jika tidak Anda harus mengutip[ -n "$1" ]
Anda dapat memeriksa jumlah argumen dengan
$#
sumber
jangan lupa, jika variabelnya $ 1 .. $ n Anda perlu menulis ke variabel biasa untuk menggunakan substitusi
sumber
DAY=${1:-$(date +%F -d "yesterday")}
Untuk beberapa argumen opsional , dengan analogi dengan
ls
perintah yang dapat mengambil satu atau lebih file atau secara default mendaftar semua yang ada di direktori saat ini:Sayangnya, tidak berfungsi dengan benar untuk file dengan spasi di path. Belum menemukan cara membuatnya.
sumber
Ini memungkinkan nilai default untuk opsional 1st arg, dan mempertahankan beberapa arg.
sumber
Dimungkinkan untuk menggunakan substitusi variabel untuk menggantikan nilai tetap atau perintah (seperti
date
) untuk argumen. Jawabannya sejauh ini berfokus pada nilai-nilai tetap, tetapi inilah yang saya gunakan untuk menjadikan tanggal sebagai argumen opsional:sumber