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

还是之前项目要写脚本,涉及到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

时间不早啦,有空再详细的解释这个玩意儿吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值