getopt 和 case 函数未执行

getopt 和 case 函数未执行

我在向脚本传递参数时遇到这样的问题,案例菜单对应的函数没有被执行。该脚本接受参数作为输入并执行适当的操作

#!/bin/bash

usage () {
echo " Usage:
-h, --help         #Displaying help
-p, --proc         #Working with directory /proc
-c, --cpu          #Working with CPU
-m, --memory       #Working with memory
-d, --disks        #Working with disks
-n, --network      #Working with networks
-la, --loadaverage #Displaying the load average on the system
-k, --kill         #Sending signals to processes
-o, --output       #Saving the results of script to disk"

exit2
}

proc () {
if [ -n "$1" ]
then
      if [ -z "$2" ]
      then
             ls /proc
      else
           cat /proc/"$2"
       fi
fi
}

parsed_arguments=$(getopt -o hp:c:m:d:n:la:k:o: --long help,proc:,cpu:,memory:,disks:,network:,loadaverage:,kill:,output:)
if [[ "${#}" -eq "" ]]
then
       usage
fi
eval set -- "$parsed_arguments"
while :
do
      case "$1" in
      -h | --help) echo " Showing usage!"; usage
       ;;
       -p | --proc) proc
       ;;
     esac
done

如果脚本没有接收任何参数,则应显示选项的说明,但如果脚本接收到以“-”或“--”开头的第一个参数作为输入,则显示与后面的字母或单词对应的功能应执行“-”或“--”。例子

No parameters:
./script.sh
 Usage:
-h, --help         #Displaying help
-p, --proc         #Working with directory /proc
-c, --cpu          #Working with CPU
-m, --memory       #Working with memory
-d, --disks        #Working with disks
-n, --network      #Working with networks
-la, --loadaverage #Displaying the load average on the system
-k, --kill         #Sending signals to processes
-o, --output       #Saving the results of script to disk"

With one parameters:
./script.sh -p
or
./script.sh --proc
The contents of the /proc directory should be displayed

With additional parameters:
 ]]./script.sh -p cpuinfo
or
./script.sh --proc cpuinfo
The contents of the file passed through the additional parameter should be displayed

执行不带参数的脚本,但不执行带参数的脚本。您能否告诉我,当向脚本传递参数时,相应的函数未执行,这可能是什么原因?

答案1

getopt需要将命令行参数解析为自身的参数。如果您使用的是实际有效的 util-linux/Busybox getopt,正确的语法是附加--然后解析参数,通常像

getopt -o abc --long this,that -- "$@"

where"$@"扩展为脚本本身的参数。

那么你也会有一个永无休止的while循环,因为你从不使用shift参数,但总是查看相同的$1.

您可能在脚本中还存在其他问题,但是修复这些问题应该可以帮助您入门。您可以使用 运行脚本bash -x myscript,或添加set -x到脚本的开头以查看命令实际上运行。

getopt、getopts 或手动解析 - 当我想同时支持短选项和长选项时使用什么?或者这个答案或者我的回答在这里有关如何使用的示例getopt

相关内容