还是之前项目要写脚本,涉及到mysql操作,要处理命令行,本来是用C写了个小工具,
但是最后发现还是没有shell方便,到底是一行shell顶200行C代码呀。
linux shell里面的命令行处理和C里面的处理差不多,都是getopt之类的;
下面有个简单的小例子:
#!/bin/bash
GET_MY_OPTION=""
OPTION_COUNT="0"
ARG_COUNT=$#
FLAG_HELP="0"
FLAG_USER="0"
FLAG_PRINTF="0"
USER_NAME=""
PRINTF_STR=""
function showHelpInfo()
{
echo "usage:"
echo "-h --help show help information"
echo "-u --user [username] user name"
echo "-p --printf [string] printf a string on screen"
echo ""
echo "example:"
echo "show help information: "
echo " ./testGetOpt.sh -h"
echo "printf a string on screen for a specified user:"
echo " ./testGetOpt.sh -u 'Benjamin Xu' -p 'Hello!' "
echo ""
}
function printfStr()
{
echo ""
echo "${PRINTF_STR} ${USER_NAME}"
echo ""
}
if [ -z "$*" ];then
showHelpInfo;
exit 1;
fi
{
GET_MY_OPTION='getopt -o hu:p: -l help,user:printf: -n ${0##*/} --"$@"'
while [[ $# -gt 0 ]]
do
case "$1" in
-h|--help)
FLAG_HELP="1"
;;
-u|--user)
USER_NAME="$2"
shift
if [ "${USER_NAME}" ];then
FLAG_USER="1"
fi
;;
-p|--printf)
PRINTF_STR="$2"
shift
if [ "${PRINTF_STR}" ];then
FLAG_PRINTF="1"
fi
;;
*)
echo "Invalid Option: $1";
break
;;
esac
shift
done
}
OPTION_COUNT=$[${FLAG_HELP}+${FLAG_USER}+${FLAG_PRINTF}]
echo "FLAG_HELP ${FLAG_HELP}"
echo "FLAG_USER ${FLAG_USER}"
echo "FLAG_PRINTF ${FLAG_PRINTF}"
echo "OPTION_COUNT ${OPTION_COUNT}"
echo "ARG_COUNT ${ARG_COUNT}"
if [[ ${OPTION_COUNT} -eq "1" ]] && [ ${ARG_COUNT} -eq "1" ] && [ ${FLAG_HELP} -eq "1" ];then
showHelpInfo;
exit 0;
elif [ ${OPTION_COUNT} -eq "2" ] && [ ${ARG_COUNT} -eq "4" ] && [ ${FLAG_USER} -eq "1" ] && [ ${FLAG_PRINTF} -eq "1" ];then
printfStr;
exit 0;
else
echo "Argument Mismatched!"
echo "eg: ./testGetOpt.sh -h"
exit 1;
fi
时间不早啦,有空再详细的解释这个玩意儿吧