如何将脚本的输入更改为 CLI 上的第一个参数?

如何将脚本的输入更改为 CLI 上的第一个参数?

我有一个名为 rename 的脚本,它指出./wid_*.jil我希望能够在执行脚本时从命令行输入该信息。

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

shell 将所有命令行参数存储在所谓的位置参数$1$2$3ETC。

一个简单的脚本,通过替换文件名中的字符串来重命名目录中匹配的所有文件,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

相关内容