Сканирование архитектуры ЦП с помощью удара

Я работаю над инструментарием для компании, на которую я работаю, проблема, один из инструментов в этом 'наборе' должен иметь способность распознать архитектуру, я уже получил работу 32 и 64 битов, но я не могу заставить руку работать, кто-либо может помочь? это - то, что я получил и потребность..

if [ "$arch" == 'armv' ];
then
echo "ARM Architecture

То, что я хочу, чтобы это сделало, - то, что, когда архитектура руки (6 или 7 я действительно не забочусь о той точке) обнаруживается, что это просто говорит, что архитектура руки, но я уже попытался редактировать

if [ "$arch" == 'armv' ];

кому:

if [ "$arch" == 'armv*' ];

Если бы кто-то знает решение, любая справка приветствовалась бы.

О, и я использую оболочку/удар, потому что они не хотят дополнительных программ на машинах, таким образом, я использую удар и оболочку, пишущую сценарий, таким образом, у них есть свои собственные программы :)

------------------РЕДАКТИРОВАНИЕ------------------

Вот код полностью так Вы, у парней может быть идея того, что я пробую

arch=$(uname -i)

if [ "$arch" == 'x86_64' ];
then 
echo "X64 Architecture" 
fi

if [ "$arch" == 'x86_32' ];
then
echo "X32 Architecture"
fi

if [ "$arch" == 'armv*' ];
then
echo "Arm architecture"
fi
2
задан 28 July 2016 в 18:20

2 ответа

Ваш шаблон работал бы, если Вы будете использовать bash ключевое слово, [[, вместо [ (test) встроенный и удаляют кавычки из шаблона шарика:

[[ $arch == arm* ]] && echo 'This is ARM Architecture'

Можно также использовать соответствие Регулярного выражения с помощью [[ ключевое слово и =~ оператор:

[[ $arch =~ ^arm ]] && echo 'This is ARM Architecture'

^arm проверки, ли переменная $arch содержит arm в запуске (маркер Regex ^ соответствует запуску строки).


Кроме того, для архитектуры на 32 бита, uname -i должен показать i386 или i686 или i486, нет x86_32.

На другой ноте необходимо использовать elif создайте скорее то использование if три раза это было разработано для задач как это. Таким образом, Ваш полный сценарий может быть переписан как:

arch=$(uname -i)
if [[ $arch == x86_64* ]]; then
    echo "X64 Architecture"
elif [[ $arch == i*86 ]]; then
    echo "X32 Architecture"
elif  [[ $arch == arm* ]]; then
    echo "ARM Architecture"
fi
3
ответ дан 2 December 2019 в 02:51

Если Вы не можете использовать измы Bash как [[ ... ]], можно также использовать case блоки для строк совпадения шарика и ответвления согласно результату соответствия:

case "`uname -i`" in
  x86_64|amd64)
    echo X64;;
  i?86)
    echo X32;;
  arm*)
    echo ARM;;
  powerpc|ppc64)
    echo PowerPC;;
esac

case блоки могут также быть более читаемыми, чем серия if ... then ... elif блоки, если существует больше чем 2 или 3 ответвления.

0
ответ дан 2 December 2019 в 02:51

Другие вопросы по тегам:

Похожие вопросы: