0

カーネルが64であるか32であるかを知りたいと思っています#!/bin/sh

このコードを作成します!

krnl=$(uname -i)

# Check whether 64 or 32 bit kernel and download the correct version;
if [ $krnl='i386' ] ; then # 32
  # Do 32-bits stuff
else
  # Do 64-bits stuff
fi

しかし、それは常に真に戻るようです。私が間違っていること、なぜこれが起こっているのか、そしてどうすればこれを修正できますか?私がグーグルで検索したものは、常にbashで表示されるか、機能しません。

前もって感謝します!

4

5 に答える 5

1

Whitesapceはbashで重要です。次のように、「=」文字の前後にスペースが必要です。

if [ $krnl = 'i386' ] ; then # 32

それ以外の場合は、長い文字列「x86_64=i386」または「i386=i386」を定義し、空でない文字列はtrueを返します。

于 2012-08-18T21:39:03.203 に答える
1

$ krnl値を適切にテストするには、「=」記号の前後にスペースが必要です。

krnl=$(uname -i)

# Check whether 64 or 32 bit kernel and download the correct version;
if [ $krnl = 'i386' ] ; then # 32
  # Do 32-bits stuff
else
  # Do 64-bits stuff
fi
于 2012-08-18T21:43:25.197 に答える
0

コマンドでは、等号の前後にスペースを入れる必要があります[。それ以外の場合は、単一の引数を取得し、その引数が空の文字列でない場合はtrueを返しますが、空の文字列になることはありません。

また、uname -m良いかもしれません。uname -iamd64マシンから「不明」になります。

于 2012-08-18T21:37:38.627 に答える
0

私のマシンでは、をuname -p返しますがi686、をuname -i返しますi386

于 2012-08-18T21:39:32.380 に答える
0

私のコンソールuname -mで、uname -iそしてuname -p戻っx86_64てください:

krnl=`uname -i`

if [ $krnl="x86_64" ] ; then # 64
  echo "64"
else
  echo "32"
fi

私のマシンで動作するはずです。

アップデート :

krnl=`uname -i`
if [ "$krnl" == "x86_64" ]; then
        echo "64"
else
        echo "32"
fi

私がに変更したとき:

if [ "$krnl" != "x86_64" ]; then

エコー32

于 2012-08-18T21:40:40.480 に答える