스크립트가 여러 매개변수를 허용하도록 하려면 어떻게 해야 합니까?

스크립트가 여러 매개변수를 허용하도록 하려면 어떻게 해야 합니까?

이것은 매우 간단한 스크립트입니다.

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


if [ -h  "$1" ]
then
         echo "$1 is a symbolic link"
else    
         echo "$1 in not a symbolic link"
fi

~
제 질문은: 여러 매개변수를 인식하도록 스크립트를 어떻게 변경할 수 있습니까? 4개의 파일이 있고 스크립트가 반환되기를 원합니다.

$1 is a symbolic link
$2 is not a symbolic link
$3 is not a symbolic link

어떻게 해야 하나요?

답변1

$@원본 스크립트와 동일한 구조를 사용하여 배열 (즉, 명령줄에 제공된 인수 목록)을 반복하면 됩니다 .

#!/usr/local/bin/bash
set -e
if [ "$#" -lt 1 ]
then
echo  "Please insert at least one argument"
exit
else
echo -e "\c"
fi


for file in "$@"
do
    if [ -h  "$file" ]
    then
         echo "$file is a symbolic link"
    else    
         echo "$file is not a symbolic link"
    fi
done

동일한 내용의 단순화된 버전은 다음과 같습니다.

#!/usr/bin/env bash
[ "$#" -lt 1 ] && printf "Please give at least one argument\n" && exit 
for file 
do
    [ -h "$file" ] && printf "%s is a symbolic link\n" "$file" || 
        printf "%s is not a symbolic link\n" "$file"
done

답변2

교대근무 변경에 대해 언급한 사람이 없나요?

if [ x = "x$1" ] ; then
    echo need at least one file
    exit 1
fi

while [ x != "x$1" ] ; do
  if [ -h  "$1" ]; then
    echo "$1 is a symbolic link"
  else    
    echo "$1 is not a symbolic link"
  fi
  shift
done

답변3

당신은 그것을 사용할 수 있습니다for 루프스크립트에 전달된 모든 파일을 처리합니다.

for f do
  if [ -h  "$f" ]; then
    printf "%s is a symbolic link\n" "$f"
  else    
    printf "%s is not a symbolic link\n" "$f"
  fi
done

답변4

내가 읽는 방법은 내 개인 스크립트가 여러 매개변수를 취하도록 하는 방법입니다. 예를 들어 wget은 "wget ​​​​url1 url2 url3"을 수행할 수 있습니다.

전체 스크립트를 "내 스크립트의 줄"이라고 표시된 다음 위치에 붙여넣고 이 파일을 새 스크립트로 저장합니다.

ARGUMENTS=$(echo "$@"| tr " " "\n") ; while read A; do "lines from my script";done < "$ARGUMENTS"

스크립트의 매개변수는 $@ 변수에 저장됩니다. 이 작은 스크립트는 스크립트를 감싸고 여러 번 실행하여 매번 다음 인수를 전달합니다. 현재 스크립트가 $1을 참조하는 경우 이를 $A로 변경해야 합니다.

관련 정보