私はbashスクリプトの初心者です。Linuxボックスに自動でインストールと構成を行うためのbashスクリプトを作成したいと思います。
編集したいとします
/etc/yum.repos.d/epel.repo
bashスクリプトによる
私がしたいことは次のとおりです
追加した最初の部分について
yum install nano
nano /etc/yum.repos.d/epel.repo
私の質問は、nanoを使用してbashスクリプトで2番目と3番目の部分を実行する方法です(可能な場合、不可能の場合はsedで表示してください)。
また、いくつかの時点で、ファイルの変数を変更する必要があります。
私はその厳しいことを知っていますが、サーバー管理に慣れていない友人のためにこれを作成する必要があります。残念ながら、私は最初からbashスクリプトを勉強する時間がないので、私の試験に近いので、スクリプトを書くために例を使用します。
私がbashスクリプトのほとんどを成功させたすべての返信にみんなありがとう
ただし、別の問題があります。sedを使用してnginx.confを変更したいとします。worker_processesを扱います。
今、私はsedを使用して次のことを行いたいです1.そのconfでworker_processes
の-最初の出現を見つけ、テキストをworker_processes 4;
で置き換えます
ここでの特記事項:これは単なる例です。 confにworker_processes 1が含まれている場合があります。 。これは難しい部分です。 最初の完全一致ケース Wordのworker_processesを見つけるsedコマンドが必要です。Wordが見つかったテキスト行を削除し、そこにworker_processes 4;
を貼り付けます。次にファイルを保存します。これは、ファイルを編集するときの最も信頼できる方法です(confを壊す危険はありません)
私がsed -i 's/enabled = 0/enabled = 1/g' /etc/yum.repos.d/remi.repoを使用して、remiの[remi]セクションでenabled = 0をenabled = 1に変更する最後の提案.repo。ただし、そのファイル内のすべてのenabled = 0を変更する可能性があると感じています。これにより、サーバーが破損します。より良いコードを提案できますか。
私が確信していない別のもの:PIはこれをテキストテスト= "0"として含むファイルを編集したい(はい、引用符があり、それを保持する必要があります)テスト= "0"からテスト= "に変更する必要があります1インチ(引用符付き)
また、私はsedのようにファイルの最後に引用符付きのテキストを追加する必要があります "Thanks Quanta"(引用符付き)phpの場合は、引用符をエコーして\を入れ、bashでどのように行われるかわからない
別物
設定の行を変更する必要がありますが、置換するテキスト全体が何であるか覚えていません
そのリッスン=何かのように; 、リッスンするように変更したい= /tmp/php5-fpm.sock;
量子を上げるための大きな親指
素晴らしいサポート担当者に感謝します
sed '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo
必要に応じて、インプレース編集オプション(-i
)を指定します(最初に.bak
拡張子でバックアップを作成します)。
sed -i.bak '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo
今、私はsedを使用して次のことを実行したいと考えています。
sed '0,/worker_processes [0-9]*;/s//worker_processes 4;/' /etc/nginx/nginx.conf
最後に、
sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/remi.repo
を使用して、enabled=0
のenabled=1
セクションの下にある[remi]
をremi.repo
に変更しました。しかし、私はそれがそのファイルのすべてのenabled=0
を変更する可能性があると感じています。これにより、サーバーが破損します。誰でもより良いコードを提案できますか?
ここにあなたのために:
sed '/\[remi\]/,/enabled=0/ { s/enabled=0/enabled=1/ }' remi.repo
私が確信していない別のもの:PIはこれをテキストテスト= "0"として含むファイルを編集したい(はい、引用符があり、それを保持する必要があります)テスト= "0"からテスト= "に変更する必要があります1インチ(引用符付き)
sed 's/Testing = "0"/Testing = "1"/g'
また、私はsedのようにファイルの最後に引用符付きのテキストを追加する必要があります "Thanks Quanta"(引用符付き)
sed '$a"Werulz, you are welcome"\'
Confの行を変更する必要がある別のことですが、置き換えるテキスト全体が何であるか覚えていません
その聞く=何かのように; 、リッスンするように変更したい= /tmp/php5-fpm.sock;
sed 's/listen = .*/listen = \/tmp\/php5-fpm.sock;/'
Ptmanが言ったように、 Augeas はsed
/awk
を使用することからあなたを救うことができます:
$ augtool -s set /files/etc/yum.repos.d/epel.repo/epel/priority 10
epel
リポジトリの優先度を10に設定します。priority
キーがすでに存在する場合は、その値を設定します。それ以外の場合は、最後のエントリの後にpriority
エントリを追加しますセクションで。
変更したい他の値についても同様です。
複数の値を変更する場合は、augtool
をインタープリターとして使用することもできます。
$ cat epel.augtool
#!/usr/bin/augtool -sf
# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel
# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
$ chmod +x epel.augtool
$ ./epel.augtool
Saved 1 file(s)
これをbashスクリプトに残したい場合は、コマンドをaugtool
にパイプできます。
cat <<EOF | augtool
# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel
# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
save
EOF
その他のオプションについては、man augtool
をご覧ください。
Augeasとsed
/awk
の使用にはいくつかの利点があります。
yum.repo
構文)を認識するパーサーがあります。正規表現が間違っていても、ファイルの構文が壊れるリスクはありません。yum.repo
セクションを認識しているため、正しいセクションを編集していることがわかります。