#!/bin/bash set -x set -e export PS4=+{$LINENO:${FUNCNAME[0]}} trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUG NEWKERNARGS="" grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q crashkernel if [ $? -ne 0 ];then NEWKERNARGS="--kernel-args=\"crashkernel=auto\"" fi grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q "nopti noibrs noibpb" if [ $? -ne 0 ];then NEWKERNARGS="--kernel-args=\"crashkernel=auto nopti noibrs noibpb\"" fi /sbin/new-kernel-pkg --package kernel%{?1:-%{1}} %{!?1:--make-default} --install %{KVERREL}%{?1:.%{1}}
上面的這種做法其實存在3個問題:
1 缺失一種場景,即是grub的內核入口參數中包含"crashkernel=auto"但不包含"nopti noibrs noibpb",
2 轉義字符使用過多,不便理解且容易出錯,可參照--install將--kernel-args參數選項移出變量的賦值過程,大大簡化原有邏輯和復雜度;
3 NEWKERNARGS參數的賦值其實可以采用字符串加方式,這樣可以減少grubby查詢次數
具體做法如下:
#!/bin/bash set -x set -e export PS4=+{$LINENO:${FUNCNAME[0]}} trap 'echo "---NEWKERNARGS=$NEWKERNARGS xx=$xx------"' DEBUG NEWKERNARGS="" grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q crashkernel if [ $? -ne 0 ];then NEWKERNARGS="crashkernel=auto" fi grubby --info=`/sbin/grubby --default-kernel` 2>/dev/null | grep -q "nopti noibrs noibpb" if [ $? -ne 0 ];then NEWKERNARGS=${NEWKERNARGS}"nopti noibrs noibpb" fi /sbin/new-kernel-pkg --package kernel%{?1:-%{1}} %{!?1:--make-default} --install %{KVERREL}%{?1:.%{1}} --kernel-args="$NEWKERNARGS"