Если количество логических процессоров является дважды количеством ядер, у Вас есть HT. Используйте для следующего сценария для декодирования/proc/cpuinfo:
#!/bin/sh
CPUFILE=/proc/cpuinfo
test -f $CPUFILE || exit 1
NUMPHY=`grep "physical id" $CPUFILE | sort -u | wc -l`
NUMLOG=`grep "processor" $CPUFILE | wc -l`
if [ $NUMPHY -eq 1 ]
then
echo This system has one physical CPU,
else
echo This system has $NUMPHY physical CPUs,
fi
if [ $NUMLOG -gt 1 ]
then
echo and $NUMLOG logical CPUs.
NUMCORE=`grep "core id" $CPUFILE | sort -u | wc -l`
if [ $NUMCORE -gt 1 ]
then
echo For every physical CPU there are $NUMCORE cores.
fi
else
echo and one logical CPU.
fi
echo -n The CPU is a `grep "model name" $CPUFILE | sort -u | cut -d : -f 2-`
echo " with`grep "cache size" $CPUFILE | sort -u | cut -d : -f 2-` cache"
Очень универсальная версия do ... в то время как
имеет следующую структуру:
while
Commands ...
do :; done
Пример:
#i=16
while
echo "this command is executed at least once $i"
: ${start=$i} # capture the starting value of i
# some other commands # needed for the loop
(( ++i < 20 )) # Place the loop ending test here.
do :; done
echo "Final value of $i///$start"
echo "The loop was executed $(( i - start )) times "
Как есть (для не задано значение i
) цикл выполняется 20 раз.
UN-Комментарий к строке, которая устанавливает i
равным 16 i = 16
, цикл выполняется 4 раза.
Для i = 16
, i = 17
, i = 18
и i = 19
.
Если i установлен в (скажем, 26) в той же точке (начале), команды все равно будут выполняться в первый раз (до тех пор, пока не будет проверена команда прерывания цикла).
Тест какое-то время должен быть правдивым (статус выхода 0).
Тест должен быть отменен для цикла до, т. Е .: быть ложным (статус выхода не равен 0).
Для работы версии POSIX необходимо изменить несколько элементов:
i=16
while
echo "this command is executed at least once $i"
: ${start=$i} # capture the starting value of i
# some other commands # needed for the loop
i="$((i+1))" # increment the variable of the loop.
[ "$i" -lt 20 ] # test the limit of the loop.
do :; done
echo "Final value of $i///$start"
echo "The loop was executed $(( i - start )) times "
./script.sh
this command is executed at least once 16
this command is executed at least once 17
this command is executed at least once 18
this command is executed at least once 19
Final value of 20///16
The loop was executed 4 times
Нет..., в то время как или действительно... до циклично выполняются, но то же самое может быть выполнено как это:
while true; do
...
condition || break
done
поскольку до:
until false; do
...
condition && break
done