Issue
I have declared an array
declare -a kernel_parms=("'kernel.shmmax ':4294967295:IBM" "'kernel.shmseg ':2048:AT" "'kernel.shmmni ':2048:BT" "'kernel.sem ':1024:IBM" "'kernel.semaem ':16384:IBM" "'kernel.semvmx ':32767:IBM" "'kernel.semmap ':1026:AT" "'kernel.semmnu ':16384:IBM" "'kernel.semume ':256:IBM" "'kernel.msgmni ':50:AT" "'kernel.msgmap ':1024:BT" "'kernel.msgmax ':4096:AT" "'kernel.msgmnb ':4096:AT")
I am running a for loop in linux
for ((i=0;i< ${#kernel_parms[@]};i++));
do
echo "Param is" + "${kernel_parms[$i]}"
parm=`echo "${kernel_parms[$i]}" | gawk -F: '{print $1}'`
echo "${kernel_parms[$i]}"
echo $parm
sysctl -a | grep -i "$parm"
done
For first entry in array parm is 'kernel.shmmax ' but grep does not return any result inside for loop but if I perform grep standalone then I do get results
# sysctl -a | grep -i 'kernel.shmmax '
kernel.shmmax = 18446744073692774399
Output of for loop is
Param is + 'kernel.shmmax ':4294967295:IBM
'kernel.shmmax ':4294967295:IBM
'kernel.shmmax '
Param is + 'kernel.shmseg ':2048:AT
'kernel.shmseg ':2048:AT
'kernel.shmseg '
Param is + 'kernel.shmmni ':2048:BT
'kernel.shmmni ':2048:BT
'kernel.shmmni '
Param is + 'kernel.sem ':1024:IBM
'kernel.sem ':1024:IBM
'kernel.sem '
Param is + 'kernel.semaem ':16384:IBM
'kernel.semaem ':16384:IBM
'kernel.semaem '
Param is + 'kernel.semvmx ':32767:IBM
'kernel.semvmx ':32767:IBM
'kernel.semvmx '
Param is + 'kernel.semmap ':1026:AT
'kernel.semmap ':1026:AT
'kernel.semmap '
Param is + 'kernel.semmnu ':16384:IBM
'kernel.semmnu ':16384:IBM
'kernel.semmnu '
Param is + 'kernel.semume ':256:IBM
'kernel.semume ':256:IBM
'kernel.semume '
Param is + 'kernel.msgmni ':50:AT
'kernel.msgmni ':50:AT
'kernel.msgmni '
Param is + 'kernel.msgmap ':1024:BT
'kernel.msgmap ':1024:BT
'kernel.msgmap '
Param is + 'kernel.msgmax ':4096:AT
'kernel.msgmax ':4096:AT
'kernel.msgmax '
Param is + 'kernel.msgmnb ':4096:AT
'kernel.msgmnb ':4096:AT
'kernel.msgmnb '
Why grep is not returning any matches inside for loop? Any help is appreciated.
Thanks, Sagar
Solution
strip the last and first character from a String
Using the above answer I am removing first and last character of variable which are quotes in the command and its showing results now
Modified inside for loop to
sysctl -a | grep -i "${parm:1:-1}";
from
sysctl -a | grep -i "$parm";
and it worked like charm
Answered By - Sagii Answer Checked By - Katrina (WPSolving Volunteer)