您的位置:首页 > 运维架构 > Shell

阶段总结 ———— linux shell 处理命令行参数

2014-07-24 21:05 351 查看
还是之前项目要写脚本,涉及到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


时间不早啦,有空再详细的解释这个玩意儿吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本 linux shell bash