Shell命令getopts简单明了的解释
我们在使用docker,一些脚本的时候,往往要带参数。
比如说docker run -name sob_blog -p 9090:9090
如何获取到这些参数内容呢?如果是我们在写shell脚本。
又比如说,我们写一个脚本
#
# $1 ota target file 1
# $2 ota target file 2
# $3 output zip file
usage()
{
echo "USAGE: [-o output-ota.zip ] [-s current-ota-files.zip] [-t target-ota-files.zip] [-r] [-d] [-k]"
echo "No ARGS means use default build option"
echo "WHERE: -o = out ota file which will upgrade current to target version "
echo " -s = current version ota zip file "
echo " -t = target version ota zip file"
echo " -r = second stage update , will update recovery fist."
echo " -d = downgrade to prevision "
echo " -k = override_timestamp , skip timestamp check ! "
echo " -w = Wipe userdata ! "
exit 1
}
CURRENT_OTA_ZIPFILE=""
TARGET_OTA_ZIPFILE=""
OUTPUT_OTA_ZIPFILE=""
UPDATE_RECOVERY=""
DOWNGRADE_PRE_VERSION=""
OVERRIDE_TIMESTAMP=""
WIPE_USER_DATA=""
# $# 表示参数个数
if [ $# -le 2 ] ; then
usage
fi
# check pass argument
while getopts "rdkws:o:t:" arg
do
case $arg in
r)
echo "will update recovery.img"
UPDATE_RECOVERY="-2"
;;
o)
OUTPUT_OTA_ZIPFILE=$OPTARG
echo "output ota zipfile " $OUTPUT_OTA_ZIPFILE
;;
t)
TARGET_OTA_ZIPFILE=$OPTARG
echo "target ota zipfile " $TARGET_OTA_ZIPFILE
;;
s)
CURRENT_OTA_ZIPFILE=$OPTARG
echo "current ota zipfile " $CURRENT_OTA_ZIPFILE
;;
d)
DOWNGRADE_PRE_VERSION="--downgrade"
echo " downgrade to pre-version"
;;
k)
OVERRIDE_TIMESTAMP="--override_timestamp"
echo " override_timestamp , skip timestamp check !"
;;
w)
WIPE_USER_DATA="-w"
echo " Wipe user data !"
;;
?)
usage ;;
esac
done
./build/tools/releasetools/ota_from_target_files $OVERRIDE_TIMESTAMP $UPDATE_RECOVERY $WIPE_USER_DATA $DOWNGRADE_PRE_VERSION -v -i $CURRENT_OTA_ZIPFILE -p out/host/linux-x86/ -k build/target/product/security/release/releasekey $TARGET_OTA_ZIPFILE $OUTPUT_OTA_ZIPFILE
./gen.fota.json.str.sh $CURRENT_OTA_ZIPFILE $TARGET_OTA_ZIPFILE $OUTPUT_OTA_ZIPFILE
这是编译ota的脚本
重点看这行代码
while getopts "rdkws:o:t:" arg
可以看到getopts的后面有rdkws:o:t:
,有些是带:的,有些是不带的。
聪明的同学一看就知道了,从解析就可以知道。不带冒号的是没有参数的,带冒号的是有参数的。
rdkws:o:t
:表示-r -d -k -w -s -o -t
而-s,-o,-t后面要带参数
怎么获取到参数呢?
通过$OPTARG就可以获取
其他的话可以去看看以下这篇文章