이 스크립트가 수행하는 작업을 이해하는 데 도움이 필요합니다.

이 스크립트가 수행하는 작업을 이해하는 데 도움이 필요합니다.
if [ $# -ne 1 ]
then
   echo Usage: $0 DIRECTORY
   exit 1

elif [ ! -d $1 ]
then
   echo $1 is not a directory
   exit 2
fi
directory=$1
cd $directory
files=*
echo $directory
echo $files
exit 0

지금까지 그걸 깨려고 노력 중이었어

  • $#남은 매개변수의 개수입니다.
  • [테스트 명령입니다
  • -ne숫자 "같지 않음" 연산자입니다. if [ $# -ne 1 ]인수가 하나만 있는지 테스트하는 경우에도 마찬가지입니다(왼쪽).

두 번째 예에서는:

  • !아니오를 의미
  • -d출력 디렉터리를 나타냅니다.
  • $1첫 번째 남은 매개변수입니다.

답변1

제공한 스크립트를 복사 shellcheck.com하고 발견된 문제를 해결한 후:

  • 실종된 소녀
  • 누락된 인용문이 많음
  • CD가 실패하면 스크립트도 실패하는지 확인하세요.
  • 할당은 변수에 문자가 하나만 포함된다는 의미 files=*와 동일합니다 . 전체 파일 목록을 .files="*"*files

스크립트는 다음과 같습니다.

#!/bin/sh -

if [ "$#" -ne 1 ]                  # check that there is one argument given.
then
    echo "Usage: $0 DIRECTORY"     # inform the user how to use the script.
    exit 1
elif [ ! -d "$1" ]                 # check that the argument is a directory.
then
    echo "$1 is not a directory"   # inform the user if on error.
    exit 2
fi

directory=$1
cd "$directory" || exit 3          # change to that directory
set -- *                           # get a list of files inside
files="$*"
echo "$directory"                  # Print the name
echo "$files"                      # Print the file list.
exit 0

여전히 더 높은 수준의 문제가 있지만 스크립트는 주석에 설명되어 있습니다.

전체 스크립트는 디렉터리의 파일을 나열합니다.

관련 정보