私の最初の試みは、他の記事で述べたように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
これら2つの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