내 첫 번째 시도는 다른 게시물에서 언급한 것처럼 sh를 사용하는 것이었습니다.여기.
터미널에서만 실행되도록 bash 스크립트 메뉴를 실행하려고 합니다.
#!/bin/bash
HEIGHT=800
WIDTH=600
CHOICE_HEIGHT=8
BACKTITLE="Installer-menu"
TITLE="Setup opions"
MENU="Choose one of the following options:"
OPTIONS=$(1 Add Mint PPA and update
2 Install Cinnamon
3 update and upgrade
4 Additional software installation
5 Upgrade Kernel
6 Resolve Ubuntu Cinnamon issues
7 Install graphic proprietary driver
x reboot )
RESULT=$(dialog --clear \
--backtitle "$BACKTITLE" \
--title "$TITLE" \
--menu "$MENU" \
$HEIGHT $WIDTH $CHOICE_HEIGHT \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)
case $RESULT in
1) sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
sudo sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
sudo sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
sudo apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
sudo apt update;;
2) sudo apt install slick-greeter muffin cinnamon;;
3) sudo apt update;
sudo apt upgrade -y;;
4) sudo sh additional-software.sh;;
5) sudo sh ubuntu-mainline-kernel.sh;;
6) sudo sh problem-solver.sh;;
7) sudo sh nvidia-installation;;
*) reboot;;
esac
그리고 더 작은 것:
#!/bin/bash
HEIGHT=800
WIDTH=600
CHOICE_HEIGHT=8
BACKTITLE="Installer-menu"
TITLE="Package options"
MENU="Choose one of the following options:"
OPTIONS=$(1 Install package list
2 Export package list
3 update and upgrade
x reboot )
RESULT=$(dialog --clear \
--backtitle "$BACKTITLE" \
--title "$TITLE" \
--menu "$MENU" \
$HEIGHT $WIDTH $CHOICE_HEIGHT \
"${OPTIONS[@]}" \
2>&1 >/dev/tty)
case $RESULT in
1) while IFS= read -r line
do
echo "apt install -y $line"
done < installation.txt;;
2) awk -F'll ' '
/apt install/ && !/nvidia/ && !/--/ && !/-f/{ print $2 }
' /var/log/apt/history.log >installation.txt;;
3) sudo apt update && sudo apt upgrade;;
*) reboot;;
esac
$ shellcheck myscript
No issues detected!
나는 두 가지 모두에서 같은 것을 간과하고 있다고 생각합니다. 두 파일 모두 마지막 명령만 실행합니다.
누군가 나를 깨달을 수 있습니까?
패키지를 실행할 수 있었던 모든 사람으로부터 도움을 받았습니다.(=bash 스크립트 파일 이름)메뉴에는 다음이 포함됩니다.
#!/bin/bash
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Package options'
menu='Choose one of the following options:'
options=(1 'Install package list'
2 'Export package list'
3 'update and upgrade'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
case "$result" in
1) echo Package Install;
sh installpkgs.sh;;
2) echo Manualy installed packages exported;
sh pkgsexport.sh;;
3) echo Package upgrade;
apt update && apt upgrade -y;;
x) echo Reboot;
reboot;;
q) clear; exit ;;
esac
이 두 sh 파일에는 다음이 포함됩니다.
#!/bin/sh
# Export manualy installed packages
# Packages installed with apt install from terminal excl.
# Output file: installation.txt
awk -F'll ' ' /apt install/ && !/nvidia/ && !/--/ && !/-f/{ print $2 } ' /var/log/apt/history.log >installation.txt
#!/bin/sh
# Install package list
for pkg in `cat installation.txt`; do sudo apt-get install -y $pkg; done
설치 프로그램 메뉴의 경우 다음과 같이 적용해 보았습니다.
#!/bin/bash
width=72
height=22
menu_height=8
backtitle="Installer-menu"
title="Setup opions"
menu="Choose one of the following options:"
options=(1 Add Mint PPA and update
2 Install Cinnamon
3 update and upgrade
4 Additional software installation
5 Upgrade Kernel
6 Resolve Ubuntu Cinnamon issues
7 Install graphic proprietary driver
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
case "$result" in
1) echo 'Mint backport repos installed';
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com A1715D88E1DF1F24 40976EAF437D05B5 3B4FE6ACC0B21F32 A6616109451BBBF2;
sh -c 'echo "deb http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
sh -c 'echo "deb-src http://packages.linuxmint.com vanessa main upstream import backport romeo" >> /etc/apt/sources.list.d/mint.list';
apt-key export 451BBBF2 | gpg --dearmour -o /etc/apt/trusted.gpg.d/mint.gpg;
apt update;;
2) echo 'Installation of Cinnamon';
apt install slick-greeter muffin cinnamon;;
3) echo 'Package upgrade';
apt update && apt upgrade -y;;
4) sh additional-software.sh;;
5) sh ubuntu-mainline-kernel.sh;;
6) sh problem-solver.sh;;
7) sh nvidia-installation;;
x) echo Reboot;
reboot;;
q) clear; exit ;;
esac
메뉴는 다음과 같이 표시됩니다.
하지만 사이에 각 제목을 입력하는 것을 잊어버렸습니다.' '
답변1
다음은 내가 의견에서 말하는 내용에 대한 (모의 실행, 에코 전용) 예입니다.
- 배열을 만드는
options=()
대신 사용하세요 .options=$()
배열 목록 및명령 대체같은 것이 아닙니다. - 배열의 여러 단어 요소는 따옴표로 묶어야 합니다.
- 소문자 변수 이름.
반품:
- 높이와 너비가
dialog
픽셀이 아닌 문자로 지정되므로 800x600 대신 72x22를 사용했습니다. 이는 "표준" 80x25 화면이나 터미널의 대부분을 채우기에 충분합니다. 아니면 둘 다 설정하여 메뉴를 원하는 크기로0
만들 수도 있습니다.dialog
- 또한 변수 이름을
CHOICE_HEIGHT
로 바꾸었습니다menu_height
. 주로dialog
매뉴얼 페이지에 그렇게 설명되어 있기 때문입니다. - 큰따옴표는 문자열에 변수 등을 삽입해야 할 때 사용됩니다. 고정 문자열에는 작은따옴표가 더 좋습니다.
- 제공된 취소 버튼 외에 "종료" 옵션을 추가 하고 다시 시작이 기본 옵션이 아니도록 명령문을
dialog --menu
변경했습니다 .case
이는 잘못된 기본값이며 사용자가 실수를 하거나 "취소" 버튼을 사용한 경우 컴퓨터가 재부팅되는 것을 원하지 않습니다.
위의 가장 중요한 항목(1과 2)은 이미 시작한 askubuntu.com의 참조 예에 있으며 너비와 높이가 모두 40x15입니다.
#!/bin/bash
width=72
height=22
menu_height=8
backtitle='Installer-menu'
title='Package options'
menu='Choose one of the following options:'
options=(1 'Install package list'
2 'Export package list'
3 'update and upgrade'
x reboot
q quit )
result=$(dialog --clear \
--backtitle "$backtitle" \
--title "$title" \
--menu "$menu" \
$height $width $menu_height \
"${options[@]}" \
2>&1 >/dev/tty)
case "$result" in
1) echo while IFS= read -r line ... ;;
2) echo awk -F'll' ... ;;
3) echo 'sudo apt update && sudo apt upgrade' ;;
x) echo reboot ;;
q) clear; exit ;;
esac