Bash - 如何在此场景中调用函数

时间:2014-11-21 01:18:12

标签: linux bash shell unix

您好我想知道将这段代码分解为函数和

的最佳方法是什么
 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

1 个答案:

答案 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在脚本末尾定义的函数。

here

的精彩教程

在主块中,像任何其他bash函数一样调用它。例如:

echo "hello"
check_parms $*
check_ports $ports
echo "..."