4006から7075までのファイル名を持つ69個のファイルを作成したいと思います。各ファイルには列挙型コンテンツが必要です。次のコードは、個々のファイルに挿入する内容をシェルに印刷します。しかし、どうすればいいですか?
#!/bin/bash
for i in `seq 4006 4075`; do
echo "vid $i\nports 524288\nactive = 1 >vlan_$i.ini"
done
引用符の間の部分を `(バックティック)に入れようとしましたが、空のファイルだけが表示されます。
答え1
echo
コマンドの出力をリダイレクトするには、リダイレクト演算子を引用符>
の外に置く必要があります。二重引用符の間の文字は>
自分自身を表します。
デフォルトでは、bashではecho
バックスラッシュシーケンスは拡張されません。-e
オプションをに渡すかecho
、xpg_echo
シェルオプションを設定するために使用するかshopt
、printf
代わりに使用する必要がありますecho
。
for i in `seq 4006 4075`; do
printf "vid %s\nports %d\nactive = 1\n" "$i" 524288 1 >"vlan_$i.ini"
done
ㅏここのドキュメント複数行の文字列を表すより読みやすい方法です。コマンドライン引数ではなく入力として渡されるので、代わりにcat
を使用してくださいecho
。テキストがインデントされると、インデントがコピーされます(インデント<<-EOF
を避けるために代わりに使用できますが、<<EOF
スペースの代わりにタブのインデントのみが可能です)。
for i in `seq 4006 4075`; do
cat <<EOF >"vlan_$i.ini"
vid $i
ports 524288
active = 1
EOF
done