Pada dasarnya, Anda memanggil Bash Script saya dengan mengetikkan mybashscript
konsol. Maka ini dimulai:
Welcome to mybashcript! Choose an option (login|logout|view|erase|quit|):
Pengguna kemudian mengetik input mana yang mereka inginkan, yang kemudian mengaktifkan Skrip Python lebih jauh ke bawah di setiap pohon opsi masing-masing.
Yang saya ingin tahu adalah, bagaimana saya bisa membuatnya sehingga pengguna hanya perlu mengetik (jika mereka telah menggunakan program sebelumnya) sesuatu seperti mybashscript login
atau mybashscript view
.
Jadi kata apa pun yang ditambahkan setelah nama skrip Bash kemudian diambil sebagai input pertama dalam skrip itu sendiri. Apakah ini mungkin?
Ini skrip saya sejauh ini, saya tidak benar-benar mengerti bagaimana memasukkan $ 1 tanpa juga membiarkannya bertanya apakah tidak ada argumen.
#!/bin/bash
echo -n "Hello $USER, welcome to the guestbook! Choose an option (sign|view|save|erase): "
read option
if [ "$option" == "sign" ]; then
python /usr/local/bin/guestbook.data/sign_guestbook.py
elif [ "$option" == "view" ]; then
python /usr/local/bin/guestbook.data/view_guestbook.py
elif [ "$option" == "save" ]; then
python /usr/local/bin/guestbook.data/save_guestbook.py
elif [ "$option" == "erase" ]; then
python /usr/local/bin/guestbook.data/erase_guestbook.py
else
echo "Sorry, I didn't understand that."
fi
shift
akan menghapus $ 1 dan menggeser yang lain ke bawah, $ 2 menjadi $ 1, $ 3 menjadi $ 2 ...Jawaban:
sumber
Dalam skrip bash Anda
$1
adalah argumen pertama,$2
argumen kedua, dan sebagainya.mis. jika Anda memiliki yang berikut di
test.sh
:Maka Anda akan mendapatkan yang berikut ini:
sumber
Cara untuk mengambil input dari baris perintah dan meneruskannya ke program Anda adalah dengan menggunakan $ 1 (untuk kata pertama setelah perintah), $ 2, $ 3 dan seterusnya.
Misalnya, katakanlah Anda menulis Bash Script ini (nama file: testcript):
Ini akan menjadi output ketika skrip dipanggil oleh pengguna dari konsol (ingat untuk menambahkan x izin sehingga skrip dapat dieksekusi oleh shell dan meletakkan skrip di / usr / local / bin /):
Terima kasih atas semua bantuan Anda, itu mendorong saya ke arah yang benar. Inilah yang akhirnya saya lakukan untuk kasus spesifik saya jika Anda penasaran; ini mungkin bukan cara terbaik atau paling elegan untuk Bash Script, tapi saya baru mulai hari ini !:
sumber
Seperti yang saya mengerti, yang Anda inginkan adalah mendapatkan argumen baris perintah.
Ambil contoh di bawah ini:
$1
mewakili argumen baris perintah pertama yang diteruskan ke program Anda.Jika kami memanggil skrip di atas (mari gunakan nama yang Anda miliki di pertanyaan Anda,
mybashscript
) denganlogin
sebagai argumenKami mendapatkan output di bawah ini:
Jika lebih argumen yang diberikan, Anda dapat mengaksesnya menggunakan
$2
,$3
, ..., dan seterusnya. Tapi itu hanya berguna ketika Anda memiliki sejumlah argumen. Jika Anda ingin menggunakan sejumlah variabel argumen, periksa posting ini di StackOverflow.sumber
Menguji kodenya:
Penjelasan:
[[ "$1" =~ ^(sign|view|save|erase)$ ]];
menguji input menggunakan ekspresi reguler untuk kode yang lebih ringkas, bukanif-else
tangga. The$1
mengacu pada argumen posisi pertama bahwa fungsi ini menerima, bukan naskah itu sendiri. Tes untuk[ -n "$1" ]
hanya mencetakSorry
pernyataan jika ada beberapa input yang dimasukkan.launch "$1" && exit
mencoba memeriksa input apa pun melalui$1
, jika berhasil skrip akan keluar.Asumsi:
if launch "$option"; then ...
kerjanya. Jika asumsi ini salah dan pemeriksaan kondisi keluar tidak diperbaiki, kami akan mandek.$1
untuk meluncurkan skrip yang benar di jalan${1}_guestbook.py
.sumber