Bashでシェルプログラムを作成し、プログラムでファイルを呼び出してテキストを変更する[閉じる]

Bashでシェルプログラムを作成し、プログラムでファイルを呼び出してテキストを変更する[閉じる]

JavaScriptを作成するように指示されました。いくつかのシェルスクリプトを学んだ後(ほとんど)私は次のようにしました:

for item in *
do
    if [ -f $item ]
    then 
        sed  's/test/open/g' file.sh
done

私はこのプログラムが私がこのプログラムを置いたフォルダ内のファイルを見つけると信じています。それからfile.shを見つけて、sedで理解されているようにtestという単語をopenに置き換えます(もう一度お話ししますが、これが真でない場合は許してください)。 1つのファイルではなくプログラム内のすべての.shファイルを検索し、すべてのファイルでtestという単語を見つけてopenに置き換えるようにプログラムを変更するにはどうすればよいですか?あいまいであれば申し訳ありません。しかし、私が扱うべきことはそれがすべてです。

ベストアンサー1

あなたのスクリプトには多くの点で欠陥があります。

for item in * <--do the following action on every item in this directory
do

         if [ -f $item ]  <--if the item is a file then do this
         then 
                sed  's/test/open/g' file.sh  <-- replace "test" with "open" in the file - file.sh
          <--missing closing "fi" statement here
done

何をしたいのかわかりませんが、すべてのtestエントリをファイルからopenに置き換えたい場合:すべてのファイルでそれを置き換えるには、file.sh次の手順を実行する必要があります。sed 's/test/open/g' file.sh

#!/bin/bash
#
script=$(basename "$0")
for item in "/path/to/files/"*; do
    if [[ "$item" == "$script" ]]; then
        :
    elif [[ -f "$item" || "${item: -2}" = "sh" ]]; then 
        sed -i 's/test/open/g' "$item"
    fi
done

編集する

実行している作業がわからない場合は、このスクリプトを非常に慎重に使用する必要があります。正しいディレクトリを指していることを確認し、その中のすべてのファイルを完全に変更していることに注意してください。

おすすめ記事