bash脚本中的参数传递
https://zhuanlan.zhihu.com/p/361164270
#!/bin/bash
START=5000000
END=6000000
SCFID=785
GENE=Cyp6a9
echo The ${GENE} is on Chr${SCFID}:${START}-${END}
chmod 777 gene.sh
./gene.sh
## The Cyp6a9 is on Chr785:5000000-6000000
#!/bin/bash
START=${1}
END=${2}
SCFID=${3}
GENE=${4}
echo The ${GENE} is on Chr${SCFID}:${START}-${END}
./gene.sh 5000000 6000000 785 Cyp6a9
## The Cyp6a9 is on Chr785:5000000-6000000
参数名匹配
#!/bin/bash
usage() {
echo "Usage: ${0} [-s|--start] [-e|--end] [-i|--scfid] [-g|--gene]" 1>&2
exit 1
}
while [[ $# -gt 0 ]];do
key=${1}
case ${key} in
-s|--start)
START=${2}
shift 2
;;
-e|--end)
END=${2}
shift 2
;;
-i|--scfid)
SCFID=${2}
shift 2
;;
-g|--gene)
GENE=${2}
shift 2
;;
*)
usage
shift
;;
esac
done
echo The ${GENE} is on Chr${SCFID}:${START}-${END}
./gene.sh -s 5000000 -e 6000000 -i 785 -g Cyp6a2
./gene.sh -e 6000000 -i 785 -g Cyp6a2 -s 5000000
./gene.sh -e 6000000 -i 785 --gene Cyp6a2 -s 5000000
# .....
当然,如果命令参数没有找到匹配,会提示错误:
./gene.sh dsafda
## Usage: ./gene.sh [-s|--start] [-e|--end] [-i|--scfid] [-g|--gene]
https://stackoverflow.com/questions/16483119/an-example-of-how-to-use-getopts-in-bash
只能在某个范围的值
#!/bin/bash
usage() { echo "Usage: $0 [-s <45|90>] [-p ]" 1>&2; exit 1; }
while getopts ":s:p:" o; do
case "${o}" in
s)
s=${OPTARG}
((s == 45 || s == 90)) || usage
;;
p)
p=${OPTARG}
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
if [ -z "${s}" ] || [ -z "${p}" ]; then
usage
fi
echo "s = ${s}"
echo "p = ${p}"
$ ./myscript.sh
Usage: ./myscript.sh [-s <45|90>] [-p ]
$ ./myscript.sh -h
Usage: ./myscript.sh [-s <45|90>] [-p ]
$ ./myscript.sh -s "" -p ""
Usage: ./myscript.sh [-s <45|90>] [-p ]
$ ./myscript.sh -s 10 -p foo
Usage: ./myscript.sh [-s <45|90>] [-p ]
$ ./myscript.sh -s 45 -p foo
s = 45
p = foo
$ ./myscript.sh -s 90 -p bar
s = 90
p = bar
#!/usr/bin/env bash
usage() { echo "$0 usage:" && grep " .)\ #" $0; exit 0; }
[ $# -eq 0 ] && usage
while getopts ":hs:p:" arg; do
case $arg in
p) # Specify p value.
echo "p is ${OPTARG}"
;;
s) # Specify strength, either 45 or 90.
strength=${OPTARG}
[ $strength -eq 45 -o $strength -eq 90 ] \
&& echo "Strength is $strength." \
|| echo "Strength needs to be either 45 or 90, $strength found instead."
;;
h | *) # Display help.
usage
exit 0
;;
esac
done
$ ./foo.sh
./foo.sh usage:
p) # Specify p value.
s) # Specify strength, either 45 or 90.
h | *) # Display help.
$ ./foo.sh -s 123 -p any_string
Strength needs to be either 45 or 90, 123 found instead.
p is any_string
$ ./foo.sh -s 90 -p any_string
Strength is 90.
p is any_string