Saya membuat skrip alat untuk tema saya memiliki 6 opsi:
1) Periksa pembaruan tema
2) Instal ulang tema
3) Instal font
4) Instal wallpaper
5 ) Periksa pembaruan alat
6) Keluar
Ini kodenya
clear
echo "==========================="
echo "Tool for theme"
echo "==========================="
function check_update {
echo "checking theme update"
}
function reinstall_theme {
echo "Reinstalling"
echo "==========================="
}
function font {
echo "Installing font"
}
function wall {
echo "Installing wallpaper"
}
function check_update_tool {
echo "Checking tool update"
}
all_done=0
while (( !all_done )); do
options=("Check theme update" "Reinstall theme" "Install font" "Install wallpaper" "Check tool update" "Quit")
echo "Choose an option: "
select opt in "${options[@]}"; do
case $REPLY in
1) check_update; break ;;
2) reinstall_theme; break ;;
3) font; break ;;
4) wall; break ;;
5) check_update_tool; break ;;
6) all_done=1; break ;;
*) echo "Invalid option" ;;
esac
done
done
echo "Exiting"
sleep 2
Tapi ketika saya menjalankannya, pilihan menunya kacau
==================
Tool for theme
==================
Choose an option:
1) Check theme update 2) Reinstall theme 3) Install font
4) Install Wallpaper 5) Check tool update 6) Quit
Tapi yang saya inginkan adalah
===============
Tool for theme
===============
Choose an option:
1) Check theme update
2) Reinstall theme
3) Install font
4) Install wallpaper
5) Check tool update
6) Quit
Jadi bagaimana saya bisa memperbaiki menu?
Jawaban yang Diterima:
Anda dapat mengatur COLUMNS
variabel untuk membatasi lebar tampilan, mis., jika Anda menyetelnya ke 12, itu akan memformat contoh Anda menjadi satu kolom:
COLUMNS=12
select opt in "${options[@]}"; do
case $REPLY in
1) check_update; break ;;
2) reinstall_theme; break ;;
3) font; break ;;
4) wall; break ;;
5) check_update_tool; break ;;
6) all_done=1; break ;;
*) echo "Invalid option" ;;
esac
menghasilkan
===========================
Tool for theme
===========================
Choose an option:
1) Check theme update
2) Reinstall theme
3) Install font
4) Install wallpaper
5) Check tool update
6) Quit
#?
Manual bash menjelaskan KOLOM:
Digunakan oleh
select
perintah untuk menentukan lebar terminal saat mencetak daftar pilihan. Secara otomatis disetel jikacheckwinsize
opsi diaktifkan (lihat The Shopt Builtin), atau di shell interaktif setelah menerimaSIGWINCH
.
Selain melihat fitur di halaman manual, ada baiknya membaca kode sumber untuk mendapatkan cerita yang lengkap. Variabel ini digunakan dalam select_query
fungsi, dengan komentar
/* Print the elements of LIST, one per line, preceded by an index from 1 to LIST_LEN. Then display PROMPT and wait for the user to enter a number. If the number is between 1 and LIST_LEN, return that selection. If EOF is read, return a null string. If a blank line is entered, or an invalid number is entered, the loop is executed again. */
dan kemudian, di select_query
fungsi
t = get_string_value ("COLUMNS"); COLS = (t && *t) ? atoi (t) : 80;
Jika Anda memberi masuk akal nilai, atoi
memberikan hasil yang masuk akal (bahkan nol dalam kasus ini akan masuk akal, karena itu kurang dari 80 kolom, dan akan dikembalikan oleh atoi
jika Anda menyetel COLUMNS
ke nilai nonnumerik). Jika tidak ada nilai, (yaitu COLUMNS=""
), bash
menggunakan 80 kolom.
Bacaan lebih lanjut:
- atoi – mengubah string menjadi integer
Panggilan atoi(str) harus sama dengan:
(int) strtol(str, (char **)NULL, 10)
- strtol, strtoll – mengubah string menjadi bilangan bulat panjang
Jika tidak ada konversi yang dapat dilakukan, 0 akan dikembalikan