データファイルの一部を抽出して別のファイルに保存するスクリプトを作成したいと思います。スクリプトを作成しましたが、いくつかのエラーが発生します。スクリプトは
#!/bin/bash
nn=0
mn=0
for var1 in 1 2 3 ; do
nn=nn+2
mn=mn+302
sed -n '$nn','$mn'p dos.dat > $var1.dat
nn=mn
done
答え1
スクリプトの即時の問題は、変数が一重引用符で囲まれているため、シェルから拡張できないことです。
sed -n '$nn','$mn'p dos.dat > $var1.dat
たぶんあなたはこれを意味するようです
sed -n "$nn,${mn}p" dos.dat > $var1.dat
2番目の変数が{
とで区切られている場合は、}
それを区切りますp
。
また、式の構文も問題です。 「=」の右側にある変数の値を取得するには、「$」が必要です。 '$((') を使用しない場合、または処理しない場合、右側は数字ではなくexpr
文字列にすぎません。
たぶん、次の意味があります。
#!/bin/bash
nn=0 ; mn=0
for var1 in 1 2 3 ; do
nn=$(($nn+2))
mn=$(($mn+302))
sed -n "$nn,${mn}p" dos.dat > $var1.dat
nn=$mn
done
~によるとPOSIX、ここで '$'$((
は必要ありません。次のいずれかを実行します。
シェル変数の場合
x
オプションとして、前のプラス記号またはマイナス記号を含み、その後に算術拡張が続く有効な整数定数を形成する値を含みます。"$((x))"
そして"$(($x))"
同じ値を返す必要があります。