我已经声明了一个数组
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")
我正在linux 中运行for循环
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
对于数组中的第一个条目,parm是"kernel.shmmax",但grep不会在循环内部返回任何结果,但如果我独立执行grep,则我会得到结果
# sysctl -a | grep -i 'kernel.shmmax '
kernel.shmmax = 18446744073692774399
for循环的输出为
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 '
为什么grep没有在循环中返回任何匹配项?感谢您的帮助。
谢谢,Sagar
从字符串中去掉最后一个和第一个字符
使用上面的答案,我删除了变量的第一个和最后一个字符,这些字符是命令中的引号,现在显示的结果
内部修改为环路
sysctl -a | grep -i "${parm:1:-1}";
来自
sysctl -a | grep -i "$parm";
它就像魅力