테마 메이커 스크립트에는 6가지 옵션이 있습니다. 1) 테마 업데이트 확인 2) 테마 재설치 3) 글꼴 설치 4) 배경화면 설치 5) 도구 업데이트 확인 6) 종료
이것은 코드입니다
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
하지만 실행하면 메뉴 선택이 엉망이 됩니다.
==================
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
하지만 내가 원하는 건
===============
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
그럼 메뉴는 어떻게 수정하나요?
답변1
이 COLUMNS
변수를 설정하여 디스플레이 너비를 제한할 수 있습니다. 예를 들어 12로 설정하면 예제가 단일 열로 형식화됩니다.
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
생산하다
===========================
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
#?
이것배쉬 매뉴얼설명 열:
사용자
select
명령은 선택 목록을 인쇄할 때 터미널 너비를 결정합니다. 다음과 같은 경우 자동으로 설정됩니다.checkwinsize
옵션이 활성화되었습니다(참조:내장 매장) 또는 대화형 셸에서 수신됨SIGWINCH
.
매뉴얼 페이지의 기능을 보는 것 외에도 소스 코드를 읽는 것도 전체 내용을 이해하는 데 도움이 될 수 있습니다. 이 변수는 다음 용도로 사용됩니다.select_query
주석이 포함된 함수
/* LIST의 요소를 한 줄에 하나씩 인쇄하고 앞에 1부터 LIST_LEN. 그런 다음 PROMPT를 표시하고 사용자가 숫자를 입력할 때까지 기다립니다. 숫자가 1과 LIST_LEN 사이이면 선택 항목이 반환됩니다. 파일이 끝나면 읽은 후에는 빈 문자열이 반환됩니다. 입력 내용이 비어 있거나 유효하지 않은 경우 숫자를 입력하고 루프를 다시 실행하십시오. */
그리고 나중에select_query
기능
t = get_string_value("열"); COLS = (t && *t) ?atoi(t): 80;
당신이 주면합리적인값은 atoi
합리적인 결과를 제공합니다(이 경우에는 0도 합리적입니다.더 적은atoi
COLUMNS
숫자가 아닌 값으로 설정된 경우 80개가 넘는 열이 반환됩니다. 값이 없으면(즉 COLUMNS=""
, ) bash
열 80이 사용됩니다.
추가 자료:
- atoi - 문자열을 정수로 변환
atoi(str) 호출은 다음과 동일해야 합니다.
(int) strtol(str, (char **)NULL, 10)
- strtol, strtoll - 문자열을 긴 정수로 변환
변환이 불가능하면 0을 반환합니다.