network.sh文件中main函数
if [ [ $# -lt 1 ] ] ; then
printHelp
exit 0
else
MODE = $1
shift
fi
if [ [ $# -ge 1 ] ] ; then
key = "$1 "
if [ [ "$key " == "createChannel" ] ] ; then
export MODE = "createChannel"
shift
fi
fi
while [ [ $# -ge 1 ] ] ; do
key = "$1 "
case $key in
-h )
printHelp $MODE
exit 0
; ;
-c )
CHANNEL_NAME = "$2 "
shift
; ;
-ca )
CRYPTO = "Certificate Authorities"
; ;
-r )
MAX_RETRY = "$2 "
shift
; ;
-d )
CLI_DELAY = "$2 "
shift
; ;
-s )
DATABASE = "$2 "
shift
; ;
-ccl )
CC_SRC_LANGUAGE = "$2 "
shift
; ;
-ccn )
CC_NAME = "$2 "
shift
; ;
-ccv )
CC_VERSION = "$2 "
shift
; ;
-ccs )
CC_SEQUENCE = "$2 "
shift
; ;
-ccp )
CC_SRC_PATH = "$2 "
shift
; ;
-ccep )
CC_END_POLICY = "$2 "
shift
; ;
-cccg )
CC_COLL_CONFIG = "$2 "
shift
; ;
-cci )
CC_INIT_FCN = "$2 "
shift
; ;
-verbose )
VERBOSE = true
shift
; ;
* )
errorln "Unknown flag: $key "
printHelp
exit 1
; ;
esac
shift
done
if [ ! -d "organizations/peerOrganizations" ] ; then
CRYPTO_MODE = "with crypto from '${CRYPTO} '"
else
CRYPTO_MODE = ""
fi
if [ "$MODE " == "up" ] ; then
infoln "Starting nodes with CLI timeout of '${MAX_RETRY} ' tries and CLI delay of '${CLI_DELAY} ' seconds and using database '${DATABASE} ' ${CRYPTO_MODE} "
elif [ "$MODE " == "createChannel" ] ; then
infoln "Creating channel '${CHANNEL_NAME} '."
infoln "If network is not up, starting nodes with CLI timeout of '${MAX_RETRY} ' tries and CLI delay of '${CLI_DELAY} ' seconds and using database '${DATABASE} ${CRYPTO_MODE} "
elif [ "$MODE " == "down" ] ; then
infoln "Stopping network"
elif [ "$MODE " == "restart" ] ; then
infoln "Restarting network"
elif [ "$MODE " == "deployCC" ] ; then
infoln "deploying chaincode on channel '${CHANNEL_NAME} '"
else
printHelp
exit 1
fi
if [ "${MODE} " == "up" ] ; then
networkUp
elif [ "${MODE} " == "createChannel" ] ; then
createChannel
elif [ "${MODE} " == "deployCC" ] ; then
deployCC
elif [ "${MODE} " == "down" ] ; then
networkDown
else
printHelp
exit 1
fi
对第一个if函数进行解析
原文
if [ [ $# -lt 1 ] ] ; then
printHelp
exit 0
else
MODE = $1
shift
fi
其中$#
用于获取输入的参数有多少,以空格为分界线
if [[ $# -lt 1 ]]
表示若输入参数小于1个,则打印help信息,大于等于1个,则将第一个参数用于MODE接收(MODE=$1
),并将参数进行左移(shift)
对第二个if函数进行解析
原文
if [ [ $# -ge 1 ] ] ; then
key = "$1 "
if [ [ "$key " == "createChannel" ] ] ; then
export MODE = "createChannel"
shift
fi
fi
判断接下来的参数是否大于等于一(ge判断大于等于),如果还有参数,使用key去接收
若key等于createChannel
字符串,则将MODE的值设置为createChannel
对第三个if函数进行解析
原文
while [ [ $# -ge 1 ] ] ; do
key = "$1 "
case $key in
-h )
printHelp $MODE
exit 0
; ;
-c )
CHANNEL_NAME = "$2 "
shift
; ;
-ca )
CRYPTO = "Certificate Authorities"
; ;
-r )
MAX_RETRY = "$2 "
shift
; ;
-d )
CLI_DELAY = "$2 "
shift
; ;
-s )
DATABASE = "$2 "
shift
; ;
-ccl )
CC_SRC_LANGUAGE = "$2 "
shift
; ;
-ccn )
CC_NAME = "$2 "
shift
; ;
-ccv )
CC_VERSION = "$2 "
shift
; ;
-ccs )
CC_SEQUENCE = "$2 "
shift
; ;
-ccp )
CC_SRC_PATH = "$2 "
shift
; ;
-ccep )
CC_END_POLICY = "$2 "
shift
; ;
-cccg )
CC_COLL_CONFIG = "$2 "
shift
; ;
-cci )
CC_INIT_FCN = "$2 "
shift
; ;
-verbose )
VERBOSE = true
shift
; ;
* )
errorln "Unknown flag: $key "
printHelp
exit 1
; ;
esac
shift
done
对剩余参数进行左移截取,直到参数为0
对第四个if函数进行解析
原文:
if [ ! -d "organizations/peerOrganizations" ] ; then
CRYPTO_MODE = "with crypto from '${CRYPTO} '"
else
CRYPTO_MODE = ""
fi
对于变量名CRYPTO,其值等于cryptogen
判断是否存在organizations/peerOrganizations
这个目录,如果不存在,则设置CRYPTO_MODE
的值等于with crypto from cryptogen
对第五个if函数进行解析
原文
if [ "$MODE " == "up" ] ; then
infoln "Starting nodes with CLI timeout of '${MAX_RETRY} ' tries and CLI delay of '${CLI_DELAY} ' seconds and using database '${DATABASE} ' ${CRYPTO_MODE} "
elif [ "$MODE " == "createChannel" ] ; then
infoln "Creating channel '${CHANNEL_NAME} '."
infoln "If network is not up, starting nodes with CLI timeout of '${MAX_RETRY} ' tries and CLI delay of '${CLI_DELAY} ' seconds and using database '${DATABASE} ${CRYPTO_MODE} "
elif [ "$MODE " == "down" ] ; then
infoln "Stopping network"
elif [ "$MODE " == "restart" ] ; then
infoln "Restarting network"
elif [ "$MODE " == "deployCC" ] ; then
infoln "deploying chaincode on channel '${CHANNEL_NAME} '"
else
printHelp
exit 1
fi
对变量MODE的值进行判断,对不同的值打印不同的提示信息。
infoln函数是通过引用当前文件夹下的scripts/utils.sh
文件,进行函数的获取的
对第六个if函数进行解析
原文:
if [ "${MODE} " == "up" ] ; then
networkUp
elif [ "${MODE} " == "createChannel" ] ; then
createChannel
elif [ "${MODE} " == "deployCC" ] ; then
deployCC
elif [ "${MODE} " == "down" ] ; then
networkDown
else
printHelp
exit 1
fi
根据MODE变量的值,执行相应的函数