私はLinuxを非常に簡単に設定できるようにいくつかのスクリプトセットを作成しました。だから私はこのスクリプトを別の関数にし、すべて1つのスクリプトに入れました。ユーザーが数値のいずれかを入力すると、関数が呼び出されるように数値を設定しました。ただし、ユーザーが数値を入力すると、スクリプトはすべての関数を呼び出します。
n=1
#note you need spaces between [ ]
while [ $n == 1 ]
do
echo "Base install=1"
echo "Mintrepos=2"
echo "Asusn13 driver=3"
echo "Install Standard openbox=4"
echo "Install Xfceopenbox=5"
echo "backing up standard open box config=6"
echo "backing up openboxfce=7"
echo
read choice
if [ "$choice"==1 ]
then
baseinstall
fi
if [ "$choice"==2 ]
then
linuxmintrepos
fi
if [ "$choice"==3 ]
then
asusn13driver
fi
if [ "$choice"==4 ]
then
standardopenbox
fi
if [ "$choice"==5 ]
then
xfceopenbox
fi
if [ "$choice"==6 ]
then
backupstandopenbox
fi
if [ "$choice"==7 ]
then
backupxfc4openbox
fi
echo "You installed: "
if [ "$choice"==1 ]
then
echo "baseinstall"
fi
if [ "$choice"==2 ]
then
echo "linuxmintrepos"
fi
if [ "$choice"==3 ]
then
echo asusn13driver
fi
if [ "$choice"==4 ]
then
echo "standardopenbox"
fi
if [ "$choice"==5 ]
then
echo "xfceopenbox"
fi
if [ "$choice"==6 ]
then
echo "backupstandopenbox"
fi
if [ "$choice"==7 ]
then
echo "backupxfc4openbox"
echo "If you would like to keep going, type in 1, if not, type in any other number"
read n
fi
done
ベストアンサー1
変える:
if [ "$choice"==1 ]
そして:
if [ "$choice" = 1 ]
すべての後続のテストに対して同じことを行います。
説明する
シェルがそれを見ると、文字列が表示されます"$choice"==1
。たとえば、choice
2の場合、文字列が表示されます2==1
。これは平等テストではありません。文字列です。空ではない文字列なので、テストはtrueを返します。したがって、すべての選択が実行されます。
同等性テストを認識するにはスペースが必要です。
また、小さな点で[
スタイルテストの場合、等号はです=
。 bashはこれを許可します==
が、正しくなく、他のシェルでは機能しません。
[...]
コマンドラインでテストを見る
[
コマンドラインでテストがどのように機能するかを簡単に探索できます。まず、空の文字列がfalseでテストされていることを示します。
$ if [ "" ]; then echo True; else echo False; fi
False
空でない文字列は何でも真です。
$ if [ abc ]; then echo True; else echo False; fi
True
それでは、見てみましょう2==1
。
$ if [ 2==1 ]; then echo True; else echo False; fi
True
2==1
空ではない文字列なので、テストはtrueです。
それでは、スペースを追加して同等性をテストしましょう。
$ if [ 2 = 1 ]; then echo True; else echo False; fi
False
$ if [ 2 = 2 ]; then echo True; else echo False; fi
True
もう少し微妙に言えば、=
ここでは文字列同一性テストが正しく機能します。数値同等性をテストするには、代わりにを使用してください-eq
。
$ if [ 2 -eq 2 ]; then echo True; else echo False; fi
True