CLI에서 스크립트 입력을 첫 번째 인수로 변경하려면 어떻게 해야 합니까?

CLI에서 스크립트 입력을 첫 번째 인수로 변경하려면 어떻게 해야 합니까?

./wid_*.jil스크립트가 실행될 때 명령줄에서 이 정보를 입력할 수 있도록 지정하는 rename이라는 스크립트가 있습니다 .

for file in ./wid_*.jil
do
    mv -i "${file}" "${file/orig/update}"
done

명령줄에 다음을 입력하고 싶습니다.

[user@location dir1]$ rename dir2/

그러면 스크립트가 dir2/모든 파일을 찾아 orig이름을 update.

나는 유닉스/리눅스를 처음 접했기 때문에 용어가 정확하지 않거나 설명이 좋지 않은 경우 사과드립니다.

답변1

$1은 bash 스크립트의 첫 번째 매개변수가 됩니다.

#!/bin/bash

directory="$1"

echo "$directory"

다음과 같은 몇 가지 검사를 수행할 수도 있습니다.

#!/bin/bash

directory="$1"

[ -z "$directory" ] && echo "Please provide a directory" && exit 1
[ ! -d "$directory" ] && echo "Directory not found" && exit 2

for file in "$directory"/wid_*.jil
do
    mv -i "${file}" "${file/orig/update}"
done

답변2

쉘은 모든 명령줄 인수를 다음과 같이 저장합니다.위치 매개변수, $1, $2, $3등.

파일 이름의 문자열을 바꾸어 디렉터리에서 일치하는 모든 파일의 이름을 바꾸는 간단한 스크립트는 wid_*.jil다음과 같습니다.origupdate

#!/bin/sh

dir="$1"

if [ -d "$dir" ]; then
  printf 'No such directory: %s\n' "$dir" >&2
  exit 1
fi

for filepath in "$dir"/wid_*.jil; do
  filename="$( basename "$filepath" | sed 's/orig/update/g' )"
  mv -i "$filepath" "$dir/$filename"
done

또는 외부 유틸리티를 사용하지 않고 다음을 사용합니다 bash.

#!/bin/bash

dir="$1"

if [[ -d "$dir" ]]; then
  printf 'No such directory: %s\n' "$dir" >&2
  exit 1
fi

for filepath in "$dir"/wid_*.jil; do
  filename="${filepath##*/}"
  filename="${filename//orig/update}"

  mv -i "$filepath" "$dir/$filename"
done

관련 정보