Bash script, ottieni il numero di core fisici come numero e itera


0

Ho scritto una sceneggiatura che mostra un numero di core fisici della macchina. Tuttavia, vorrei che il risultato fosse un numero, non una stringa.

Ecco la sceneggiatura:

phycores=echo $sudoPW | cat /proc/cpuinfo | grep -m 1 "cpu cores" | awk '{print $ 4;}'
echo $phycores  

for i in {1..$phycores}
do
   echo "Core $i"
done

bashconverti al volo stringhe in numeri. quindi non dovresti preoccuparti di questo
Romeo Ninov il

Ma perché sto ottenendo una nuova riga mentre provo a fare eco $phycores? Mostra 2 [Enter], non solo 2
Brian Brown il

Cosa intendi con "core fisici"? Quello che stai cercando di estrarre cpuinfopotrebbe non essere quello che desideri. Vedere questa domanda .
Kamil Maciorowski il

1
bash non ha la nozione di numeri. Tutto è una stringa o una matrice di stringhe.
Gronostaj,

@BrianBrown Se hai solo bisogno del "numero", allora \n\r\n
rimuovi la

Risposte:


1

Sto individuando alcuni problemi:

  • Perché il echo $sudoPWpiping al gatto? gatto lo ignora senza da -qualche parte.

  • E $phycoresnon viene impostato senza backtick o $()non può essere lo script reale che stai eseguendo, e imposta comunque $ phycores su un numero con una nuova riga?

  • Il {1..n}costrutto non funziona con una variabile, se eri $phycores4 allora imposta semplicemente la $ivariabile su {1..4}. Vedi questa Q su StackOverflow per maggiori dettagli. (Una nuova riga $phycoresnon dovrebbe importare)

Comunque, questo dovrebbe essere uno script più funzionante

phycores=$(echo $sudoPW|cat - /proc/cpuinfo|grep -m 1 "cpu cores"|awk '{print $ 4;}')

echo $phycores  

for ((i=1;i<=phycores;++i))
do
   echo "Core $i"
done

In assenza di un tag Linux, :) aggiungerò l'equivalente (più semplice) di FreeBSD: phycores = $ (sysctl -n hw.ncpu)
Jim L.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.