我在向脚本传递参数时遇到这样的问题,案例菜单对应的函数没有被执行。该脚本接受参数作为输入并执行适当的操作
#!/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
。