shell 脚本(menu)

本文介绍了一个用于自动生成菜单配置文件的Shell脚本。该脚本读取指定的配置文件,解析其中的菜单项信息,并生成对应的Menu.h头文件。Menu.h中包含了枚举类型、资源ID以及其他与菜单相关的配置数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#########################################################################
# File Name: autogenMenu_h.sh
# Author: xxxx
# mail: 
# Created Time:
#########################################################################
#!/bin/sh


outputfile="Menu.h"


echo "$#"
if [ $# -ne 1 ]; then
echo "Usage: $0 "configuration_file" "
exit 1
fi


inputfile=$1
if [ -e $inputfile ];then
echo "your menu configuration file is $inputfile"
else
echo "configuration file not exsist"
exit 1
fi


array_menu_name=()
array_have_submenu=()
array_have_checkbox=()
array_have_value_string=()


write_head()
{
echo "" > $outputfile
echo "/*************************************************************************" >> $outputfile
echo -e " > File Name: Menu.h">> $outputfile
echo -e " > Description:">> $outputfile
echo -e " > \tGenerated by script">> $outputfile
echo " ************************************************************************/" >> $outputfile
echo "#ifndef __MENU_H__" >> $outputfile
echo "#define __MENU_H__" >> $outputfile
echo "#include <xxx/common.h>" >> $outputfile
echo "#include <xxxx/xxx.h>" >> $outputfile
echo "#include <xxx/gdi.h>" >> $outputfile
echo "#include <xxxx/window.h>" >> $outputfile
echo "#include <xxxx/control.h>" >> $outputfile
echo "" >> $outputfile
echo "#include \"windows.h\"" >> $outputfile
echo "#include \"xxx_widgets.h\"" >> $outputfile
echo "#include \"keyEvent.h\"" >> $outputfile
echo "#include \"xxx_message.h\"" >> $outputfile
echo "#include \"StorageManager.h\"" >> $outputfile
echo "#include \"ResourceManager.h\"" >> $outputfile


echo "" >> $outputfile
}


write_tail()
{
echo "" >> $outputfile
echo "#endif" >> $outputfile
echo "" >> $outputfile
}


generate_menuIndex()
{
echo "" >> $outputfile

echo -e "enum menuIndex {" >> $outputfile


i=0
while [ $i -lt ${#array_menu_name[@]} ]
do
if [ $i -ne  $((${#array_menu_name[@]} - 1)) ]; then
echo -e "\tMENU_INDEX_${array_menu_name[$i]}," >> $outputfile
else
echo -e "\tMENU_INDEX_${array_menu_name[$i]}" >> $outputfile
fi
let i++
done




echo "};" >> $outputfile
}


generate_menuResourceID()
{
echo "" >> $outputfile


echo "enum ResourceID menuResourceID[] = {" >> $outputfile
i=0
while [ $i -lt ${#array_menu_name[@]} ]
do
if [ $i -ne  $((${#array_menu_name[@]} - 1)) ]; then
echo -e "\tID_MENU_LIST_${array_menu_name[$i]}," >> $outputfile
else
echo -e "\tID_MENU_LIST_${array_menu_name[$i]}" >> $outputfile
fi
let i++
done


echo "};" >> $outputfile
}


generate_haveCheckBox()
{
echo "" >> $outputfile


echo "unsigned int haveCheckBox[] = {" >> $outputfile


i=0
while [ $i -lt ${#array_have_checkbox[@]} ]
do
if [ $i -ne  $((${#array_have_checkbox[@]} - 1)) ]; then
if [ ${array_have_checkbox[$i]} -eq 1 ]; then
echo -e "\t${array_have_checkbox[$i]}, \t/*${array_menu_name[$i]} \t\t have check box */" >> $outputfile
else
echo -e "\t${array_have_checkbox[$i]}, \t/*${array_menu_name[$i]} \t\t not have check box */" >> $outputfile
echo
fi
else
if [ ${array_have_checkbox[$i]} -eq 1 ]; then
echo -e "\t${array_have_checkbox[$i]} \t/*${array_menu_name[$i]} \t\t have check box */" >> $outputfile
else
echo -e "\t${array_have_checkbox[$i]} \t/*${array_menu_name[$i]} \t\t not have check box */" >> $outputfile
fi
fi
let i++
done


echo "};" >> $outputfile
}


generate_haveSubMenu()
{
echo "" >> $outputfile


echo "unsigned int haveSubMenu[] = {" >> $outputfile


i=0
while [ $i -lt ${#array_have_submenu[@]} ]
do
if [ $i -ne  $((${#array_have_submenu[@]} - 1)) ]; then
if [ ${array_have_submenu[$i]} -eq 1 ]; then
echo -e "\t${array_have_submenu[$i]}, \t/*${array_menu_name[$i]} \t\t have sub menu */" >> $outputfile
else
echo -e "\t${array_have_submenu[$i]}, \t/*${array_menu_name[$i]} \t\t not have sub menu */" >> $outputfile
echo
fi
else
if [ ${array_have_submenu[$i]} -eq 1 ]; then
echo -e "\t${array_have_submenu[$i]} \t/*${array_menu_name[$i]} \t\t have sub menu */" >> $outputfile
else
echo -e "\t${array_have_submenu[$i]} \t/*${array_menu_name[$i]} \t\t not have sub menu */" >> $outputfile
fi
fi
let i++
done


echo "};" >> $outputfile
}


generate_haveValueString()
{
echo "" >> $outputfile


echo "unsigned int haveValueString[] = {" >> $outputfile


i=0
while [ $i -lt ${#array_menu_name[@]} ]
do
if [ $i -ne  $((${#array_menu_name[@]} - 1)) ]; then
if [ ${array_have_value_string[$i]} -eq 1 ]; then
echo -e "\t${array_have_value_string[$i]}, \t/*${array_menu_name[$i]} \t\t have value string */" >> $outputfile
else
echo -e "\t${array_have_value_string[$i]}, \t/*${array_menu_name[$i]} \t\t not have value string */" >> $outputfile
echo
fi
else
if [ ${array_have_submenu[$i]} -eq 1 ]; then
echo -e "\t${array_have_value_string[$i]} \t/*${array_menu_name[$i]} \t\t have value string */" >> $outputfile
else
echo -e "\t${array_have_value_string[$i]} \t/*${array_menu_name[$i]} \t\t not have value string */" >> $outputfile
fi
fi
let i++
done


echo "};" >> $outputfile




echo "" >> $outputfile
}


generate_submenu_content0_cmd()
{
echo "" >> $outputfile


echo "int subMenuContent0Cmd[] = {">> $outputfile


i=0
while [ $i -lt ${#array_have_submenu[@]} ]
do
if [ $i -ne  $((${#array_have_submenu[@]} - 1)) ]; then
if [ ${array_have_submenu[$i]} -eq 1 ]; then
echo -e "\tLANG_LABEL_SUBMENU_${array_menu_name[$i]}_CONTENT0," >> $outputfile
else
echo -e "\t-1, \t/*${array_menu_name[$i]} not have sub menu */" >> $outputfile
fi
else
if [ ${array_have_submenu[$i]} -eq 1 ]; then
echo -e " \tLANG_LABEL_SUBMENU_${array_menu_name[$i]}_CONTENT0" >> $outputfile
else
echo -e "\t-1 \t/*${array_menu_name[$i]} not have sub menu */" >> $outputfile
fi
fi
let i++
done


echo "};" >> $outputfile
echo "" >> $outputfile
}


generate_mlflags()
{
echo "" >> $outputfile


echo "MLFlags mlFlags[MENU_LIST_COUNT] = {">> $outputfile
echo "/***** 1. image flag2. value flags 3. value counts *****************/" >> $outputfile


i=0
while [ $i -lt ${#array_menu_name[@]} ]
do
echo -e "\t/*${array_menu_name[$i]}*/">> $outputfile
if [ ${array_menu_name[$i]} == "FIRMWARE" ]; then 
echo -e "\t{ IMGFLAG_IMAGE, {VMFLAG_STRING}, 1}," >> $outputfile
let i++
continue
fi
if [ ${array_have_submenu[$i]} -eq 1 ]; then
echo -e "\t{ IMGFLAG_IMAGE, {VMFLAG_STRING, VMFLAG_IMAGE}, 2}," >> $outputfile
else
if [ ${array_have_checkbox[$i]} -eq 1 ]; then
echo -e "\t{ IMGFLAG_IMAGE, {VMFLAG_IMAGE}, 1}," >> $outputfile
else
echo -e "\t{ IMGFLAG_IMAGE, {0}, 0}," >> $outputfile
fi
fi
echo "" >> $outputfile


let i++
done


echo "};" >> $outputfile
echo "" >> $outputfile
}




str=`grep -n -P '^\[menu\]' $inputfile`              #   行首字符:如果我想要让 the 只在行首列出呢? 这个时候就得要使用定位字节
if [ $? -eq 0 ]; then
echo str is $str
else
echo "not find [menu]"
exit 1
fi




start_line=`echo $str | cut -d ":" -f 1`
echo "start_line is $start_line"


total_line=`wc -l $inputfile | cut -d " " -f 1`
echo "total lines is $total_line"


line=$((start_line + 1))


count=0
while [ $line -le $total_line ]
do
str=`sed -n ' '"$line"' p' $inputfile`
# echo "line $line is $str"


menulist_name=`echo $str | cut -d "," -f 1`
# echo "menulist_name is $menulist_name"
array_menu_name[$count]=$menulist_name


echo $str | cut -d ',' -f 2 | grep -q "have sub menu"
if [ $? -eq 0 ]; then
array_have_submenu[$count]=1
else
array_have_submenu[$count]=0
fi


echo $str | cut -d ',' -f 3 | grep -q "have check box"
if [ $? -eq 0 ]; then
array_have_checkbox[$count]=1
else
array_have_checkbox[$count]=0
fi


echo $str | cut -d ',' -f 4 | grep -q "have value string"
if [ $? -eq 0 ]; then
array_have_value_string[$count]=1
else
array_have_value_string[$count]=0
fi


let line++
let count++
done


i=0
while [ $i -lt ${#array_menu_name[@]} ]
do
echo "array_menu_name[$i] is ${array_menu_name[$i]}"
echo "array_have_submenu[$i] is ${array_have_submenu[$i]}"
echo "array_have_checkbox[$i] is ${array_have_checkbox[$i]}"
echo "array_have_value_string[$i] is ${array_have_value_string[$i]}"
let i++
done


write_head


echo "#define MENU_LIST_COUNT  ${#array_menu_name[@]}">> $outputfile


generate_menuIndex


generate_menuResourceID


generate_haveCheckBox


generate_haveSubMenu


generate_haveValueString


generate_submenu_content0_cmd


generate_mlflags


write_tail


exit 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值