스크립트에 매개변수를 전달할 때 이런 문제가 발생했습니다. 케이스 메뉴에 해당하는 기능이 실행되지 않았습니다. 스크립트는 매개변수를 입력으로 받아들이고 적절한 작업을 수행합니다.
#!/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 -- "$@"
여기서는 "$@"
스크립트 자체의 매개변수로 확장됩니다.
while
그러면 매개변수를 사용하지 않고 shift
항상 동일한 매개변수를 확인하기 때문에 끝없는 루프가 발생하게 됩니다 $1
.
스크립트에 다른 문제가 있을 수 있지만 이러한 문제를 해결하려면 시작해야 합니다. 를 사용하여 스크립트를 실행하거나 스크립트 시작 부분에 bash -x myscript
추가하여 명령을 볼 수 있습니다.set -x
실제로달리다.
바라보다getopt, getopts 또는 수동 구문 분석 - 짧은 옵션과 긴 옵션을 모두 지원하려면 무엇을 사용해야 합니까?또는이 답변또는내 대답은 여기에 있다사용 방법의 예입니다 getopt
.