您好我想知道将这段代码分解为函数和
的最佳方法是什么 case $# in
1) ports='1-1023'
host=$1 ;;
2) ports=$1
host=$2 ;;
*) echo 'Usage: portscan [port|range] host'
exit 1 ;;
esac
# check port range
if [ "$(echo $ports | grep '^[1-9][0-9]*-[1-9][0-9]*$')" != "" ]; then
firstport=$(echo $ports | cut -d- -f1)
lastport=$(echo $ports | cut -d- -f2)
elif [ "$(echo $ports | grep '^[1-9][0-9]*$')" != "" ]; then
firstport=$ports
lastport=$ports
else
echo "$ports is an invalid port(s) value"
exit 2
fi
# check firstport > lastport
if [ $firstport -gt $lastport ]; then
echo $firstport is larger than $lastport
exit 3
fi
**并在主要方面称呼它们****
# Check parameters and exit 1 if problem
check_parms $#
# Check port range and exit 2 if problem
check_ports $ports
# Check port order and exit 3 if problem
check_order $firstport $lastport
答案 0 :(得分:1)
当你调用一个bash函数时,它也有自己的$ *,$#,$ 1,....来反映这个调用。所以你可以构建一些像
这样的小函数function check_parms() {
local num=$# <----------- I changed this line
case $num)
... etc
}
然后,
function check_ports() {
local ports=$1
if ...
}
等
我希望这会给你一些重构的想法。如果您正在考虑source
bash脚本,那么您可以选择unset
在脚本末尾定义的函数。
在主块中,像任何其他bash函数一样调用它。例如:
echo "hello"
check_parms $*
check_ports $ports
echo "..."