1

私のスクリプトで助けが必要です。ISOファイルをUTF-8に変換したい。問題は、IF の書き方がわからないことです。

if [ `file -b {}` = "$UTF8" ] \ 

どうすれば sed プログラムに伝えることができますか - # コメントを無視するのですか?

これが私のスクリプトです:

#!/bin/bash

clear

echo -e '\E[37mThis script encodes recursively files from \E[31mISO-8859-1 \E[37mto         \E[31mUTF-8 \E[37musing iconv.'
echo "Files of the following coded character sets will be encode: "
echo -e '\E[32m'

a='*.java'
b='*.txt'
c='*.php'
d='*.html'
e='*.aj'
f='*.patch'
g='*.css'
h='*.js'
i='*.conf'
j='*.jsp'
k='*.sh'
l='*.py'
m='*.pl'
n='*.rb'

for x in "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" "$i" "$j" "$k" "$l" "$m" "$n" 
do
   echo $x
done

echo
tput sgr0

#
# TODO: COMMENTS aren't ignored
# TOOD: IF-THEN aren't working right
#


for y in  "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" "$i" "$j" "$k" "$l" "$m" "$n"  
  do
    echo -e "\E[37mencoding all <\E[32m$y\E[37m> files ..."
    find . -name "$y" -exec sh -c "( \
      UTF=".*UTF-8 Unicode.*" \
      FILE={} \
      if [ `file -b {}` = "$UTF8" ] \ 
        then  \   
          iconv -f latin1 -t UTF-8 {} -o {}.iconv ; \
          sed -n '
              { 
                s/^ *#/#/#.*//g;
                s/ä/0xE4;/g;
                s/Ä/0xC4;/g;
                s/ü/0xFC;/g;
                s/Ü/0xDC;/g;
                s/ö/0xF6;/g;
                s/Ö/0xD6;/g;
                s/ß/0xDF;/g;
                p; 
                }  {}.iconv > {}.iconv_sed \ '
       mv {}.iconv_sed {} && rm {}.iconv ; \
    else \
      echo "$FILE is a UTF8 file. " \ 
  fi \
)" \;
      echo -e '\E[33m*** done ***'
done

echo 
tput sgr0

exit 0

ありがとう

4

1 に答える 1

1

あなたのスクリプトにはいくつかの間違いがあるように見えます (たとえば、"UTF8" 変数がどこにも定義されていないなど)。私だったら、次のようにします。

  1. すべての検索のsh -c "...がらくたを別のスクリプトに入れて、個別にテストできるようにします
  2. if [ "`file -b $1`" = ...
    
  3. おそらくsed別の関数に入れて、それをテストします

  4. 使用しないで、すべての行sed -nを明示的に使用しないでください。それp;はばかげています
  5. sed スクリプトを適切に引用します。その中でリダイレクトを行おうとしていると思います

... 開始するには、5 つの提案で十分です。提案 0 は「質問のより具体的なタイトルを書いてください」

于 2011-04-03T21:37:04.020 に答える