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

私はUnix / Linuxに初めて触れたので、用語が正しくないか、説明が悪い場合はお詫び申し上げます。

答え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

関連情報