×÷Õߣºjunky
ϲ»¶linux²»ÊÇÒ»Á½ÌìÁË£¬ÔÒòÌ«¶àÎҾͲ»ËµÁË¡£ËùÒÔ¶ÔlinuxµÄ¶«¶«¶¼Ï²»¶È¥³¢ÊÔһϡ£¶ø×÷ΪlinuxµÄÒ»ÖֺܿáµÄÈË»ú½»»¥½Ó¿Úshell£¬Ò²ÊǺÜˬµÄ¡£µ±È»£¬¶Ôlinux£¬ÎÒÒ²Ö»ÄÜËãÒ»²ËÄñ¡£
¿´ÎÒдµÄ½Å±¾£º¹þ¹þ¡££¨Ã»ÓÐд¹ýºÜ³¤µÄ½Å±¾£¬»ù±¾ÉϾÍÊǰÑËûµ±CÀ´ÓÃÁË£¬µ«ËüÓÖûÓÐCµÄһЩ¹¦ÄÜ¡£¸ßÊÖĪЦ£©Ã»ÓÐ×¢ÊÍ¡£[code]#!/bin/sh
#file: gen-cmd.sh
#generate the cmd line for console
#need a config file. for example:
#config file: cmd.conf (not contain the '#')
#string:create mac_based_vlan mac_address 00-00-00-00-::
#number:10:11:
#string:-::
#number:10:11:
#string: vlan default::
#./gen-cmd.sh -f cmd.conf -o cmd.txt
#then cmd.txt is: (not contain the '#')
#create mac_based_vlan mac_address 00-00-00-00-10-10 vlan default
#create mac_based_vlan mac_address 00-00-00-00-11-11 vlan default
#./gen-cmd.sh -f cmd.conf -o cmd.txt -l
#then cmd.txt is: (not contain the '#')
#create mac_based_vlan mac_address 00-00-00-00-10-10 vlan default
#create mac_based_vlan mac_address 00-00-00-00-10-11 vlan default
#create mac_based_vlan mac_address 00-00-00-00-11-10 vlan default
#create mac_based_vlan mac_address 00-00-00-00-11-11 vlan default
CONFIG_FILE=""
CMD_FILE=""
LINE[1]=""
NUMBER_START[1]=""
NUMBER_START_BACKUP[1]=""
NUMBER_END[1]=""
EOF_SIGN="__EOF__"
LAST_COMMAND[1]=""
ITEM_COUNTER=0
LINE_COUNTER=0
LOOP_IN_LOOP=0
print_version()
{
echo "
*************************************************
generate the cmd line for console
---------------------
Version 1.0
*************************************************"
}
__print()
{
echo $*
}
__exit()
{
UKOWN_ERROR=-1
if [ -n "$1" ]; then
echo "$1"
if [ -n "$2" ]; then
exit $2
else
exit ${UKOWN_ERROR}
fi
else
echo "unkown error"
exit ${UKOWN_ERROR}
fi
}
__help()
{
echo "
Usage: gen-cmd.sh {-l} {-h} {-f config-file} { -o output-file}"
exit $1
}
__trace()
{
TRACE_COUNTER=$[TRACE_COUNTER+1];
if [ -n "$1" ]; then
echo Trace $1! Counter is ${TRACE_COUNTER}
else
echo Trace here! Counter is ${TRACE_COUNTER}
fi
}
load_param()
{
echo "Prameter number:$#, content:$*"
CONFIG_FILE="cmd.conf" #default value
CMD_FILE="cmd.txt"
LOOP_IN_LOOP=0
while [ $# -ne 0 ]; do
case $1 in
-f) CONFIG_FILE=$2
shift;shift;;
-o) CMD_FILE=$2
shift;shift;;
-l) LOOP_IN_LOOP=1;
shift;;
-h) __help;;
*) __print "Illegal Option: $1"
__help
esac
done
echo "Config file: ${CONFIG_FILE}; Output file: ${CMD_FILE}"
echo
if [ ! -f "${CONFIG_FILE}" ]; then
__exit "Can not find the config file: ${CONFIG_FILE}"
fi
if [ ! -r "${CONFIG_FILE}" ]; then
__exit "Permission deny, can not read config file: ${CONFIG_FILE}"
fi
>${CMD_FILE}
if [ ! -w "${CMD_FILE}" ]; then
__exit "Permission deny, can not write output file: ${CMD_FILE}"
fi
}
read_line()
{
ITEM_COUNTER=$[ITEM_COUNTER+1];
LINE_COUNTER=$[LINE_COUNTER+1];
line_temp=$(sed -n "${LINE_COUNTER}p" ${CONFIG_FILE} | sed 's/[\r\n]//')
while [ 1 ]; do
if [ "${line_temp}" = "" ]; then
LINE[$ITEM_COUNTER]=${EOF_SIGN} #do not use this string in command
ITEM_COUNTER=$[ITEM_COUNTER-1];
return
fi
local_temp=$(echo -n ${line_temp} | sed 's/ //')
if [ "${local_temp:0:1}" != "#" ]; then
break
fi
echo "Skip @ line ${LINE_COUNTER}: ${line_temp}"
LINE_COUNTER=$[LINE_COUNTER+1];
line_temp=$(sed -n "${LINE_COUNTER}p" ${CONFIG_FILE} | sed 's/[\r\n]//')
done
LINE[$ITEM_COUNTER]=${line_temp}
local_temp=$(echo -n "${line_temp}"|awk -F'[:]' '{print $1}')
if [ "${local_temp}" = "string" ]; then
local_temp=$(echo -n ${line_temp} | awk -F'[:]' '{print $2}')
if [ "${local_temp}" = "" ]; then
__exit "Invlid format @ line ${LINE_COUNTER}: ${local_temp}"
fi
LINE[$ITEM_COUNTER]=${local_temp}
echo "String format @ line ${LINE_COUNTER}:${local_temp}"
read_line
ITEM_COUNTER=$[ITEM_COUNTER-1];
return
elif [ "${local_temp}" != "number" ]; then
__exit "Invlid format @ line ${LINE_COUNTER}: ${local_temp}"
fi
#number format
NUMBER_START[$ITEM_COUNTER]=$(echo -n ${line_temp} | awk -F'[:]' '{print $2}')
NUMBER_END[$ITEM_COUNTER]=$(echo -n ${line_temp} | awk -F'[:]' '{print $3}')
NUMBER_START[$ITEM_COUNTER]=$[${NUMBER_START[$ITEM_COUNTER]}+0] #convert to number
NUMBER_END[$ITEM_COUNTER]=$[${NUMBER_END[$ITEM_COUNTER]}+0] #convert to number
LINE[$ITEM_COUNTER]=""
echo "Number format @ line ${LINE_COUNTER}: start:${NUMBER_START[$ITEM_COUNTER]}, end:${NUMBER_END[$ITEM_COUNTER]}"
read_line
ITEM_COUNTER=$[ITEM_COUNTER-1];
return
}
gen_cmd()
{
ITEM_COUNTER=$[ITEM_COUNTER+1];
local_temp=${LINE[$ITEM_COUNTER]}
if [ "${local_temp}" = "${EOF_SIGN}" ]; then
ITEM_COUNTER=$[ITEM_COUNTER-1];
echo ${LAST_COMMAND[$ITEM_COUNTER]} >> ${CMD_FILE}
return
fi
if [ -n "${local_temp}" ]; then #string format
LAST_COMMAND[$ITEM_COUNTER]="${LAST_COMMAND[$ITEM_COUNTER-1]}${local_temp}"
gen_cmd
ITEM_COUNTER=$[ITEM_COUNTER-1];
return
fi
#number format
if [ ${LOOP_IN_LOOP} == 1 ]; then
NUMBER_START_BACKUP[ITEM_COUNTER]=${NUMBER_START[$ITEM_COUNTER]}
while [ ${NUMBER_START[$ITEM_COUNTER]} -le ${NUMBER_END[$ITEM_COUNTER]} ]; do
LAST_COMMAND[$ITEM_COUNTER]="${LAST_COMMAND[$ITEM_COUNTER-1]}${NUMBER_START[$ITEM_COUNTER]}"
gen_cmd
NUMBER_START[$ITEM_COUNTER]=$[NUMBER_START[$ITEM_COUNTER]+1]
done
NUMBER_START[ITEM_COUNTER]=${NUMBER_START_BACKUP[$ITEM_COUNTER]}
elif [ ${NUMBER_START[$ITEM_COUNTER]} -le ${NUMBER_END[$ITEM_COUNTER]} ]; then
LAST_COMMAND[$ITEM_COUNTER]="${LAST_COMMAND[$ITEM_COUNTER-1]}${NUMBER_START[$ITEM_COUNTER]}"
gen_cmd
NUMBER_START[$ITEM_COUNTER]=$[NUMBER_START[$ITEM_COUNTER]+1]
else #all loops are done!
echo
echo
__exit "sucess" 0
fi
ITEM_COUNTER=$[ITEM_COUNTER-1];
return
}
# SHELL BEGINS ! MAIN ENTRY !!!
print_version
load_param $*
read_line
echo
echo -n "Generating command ... please wait ... "
if [ ${LOOP_IN_LOOP} -eq 0 ]; then
while [ 1 ]; do
gen_cmd
done
else
gen_cmd
fi
echo
echo
__exit "sucess" 0[/code]


grzrt ÓÚ 2008-02-05 10:19:03·¢±í:
¶àÏòÂ¥Ö÷ѧϰ ÎÒ¸Õ¿ªÊ¼Ñ§Ï°linux
¹þ