1

別のスクリプトが読み取る.confファイルには、変数のみが含まれています。実際には、現時点ではこれら3つだけです。

    pass=blahblahblah
    port=number 
    user=someusername

.conf ファイル内の変数を変更/置換/書き換えるスクリプトを作成するにはどうすればよいですか? 私は以前に別の形でこの質問をしましたが、それのためにシャットダウンされました。これは私にとって非常に新しいことであり、最初はこのようなタスクを達成する前に非常に混乱する可能性があります. これが私のパズルの最後のピースです。

ありがとう、助けていただければ幸いです。

4

3 に答える 3

2

変数に値を取得したら、sed次の行に沿ってファイルのインプレース編集を行うために使用できます。

$ cat test.conf
pass=blahblahblah
port=number
user=someusername

$ export NEWPASS='password'

$ sed -i -e"s/^pass=.*/pass=$NEWPASS/" test.conf

$ cat test.conf
pass=password
port=number
user=someusername

要求に応じて、入力をキャプチャする bash スクリプト内の例を更新します。これはパスワードなので、-sオプションを使用readして、文字が画面にエコー バックしないようにします。また、プリミティブ条件のテスト (空のパスワードは許可されません) と、スクリプトを早期に終了するためのエラー トラップの例もいくつかあります。最後に余分な「完了」メッセージが表示されているのは、エラーが検出されたときにスクリプトが実際に終了することを示すためです (エラーが発生しない限り、その最終メッセージは表示されません)。に渡されたファイルの名前を存在しないファイル名に変更するsedと、「変更に失敗しました」というメッセージが表示されます。

#!/bin/bash

read -s -p "Please specify the new password: " NEWPASS
echo ""

if test "$NEWPASS" = ""; then
        echo "$0: sorry, password cannot be blank" >&2
        exit 1;
fi

sed -i -e"s/^pass=.*/pass=$NEWPASS/" test.conf

if test $? -eq 0; then
        echo 'password changed' >&2
else
        echo 'change attempt failed' >&2
        exit 1
fi

echo "done" >&2

例の実行:

$ cat test.conf
pass=blahblahblah
port=number
user=someusername
$ ./pwchange.bash
Please specify the new password: # it wasn't echoed, but I typed 'foo'
password changed
done
$ cat test.conf
pass=foo
port=number
user=someusername
于 2013-10-20T04:21:09.097 に答える
1

変更したい変数ごとにファイル内の変数を変更するには、次のような行が必要です

sed -e 's/\(^pass=\).*/\1my_new_password/' -e 's/\(^file=\).*/\1new_file_name/' /etc/file.conf 

括弧内の単語と、最後の /' の前の \1 の後のすべての単語を、ケースに合わせて変更するだけです。

部分ごとに分解する
-e は、sed
's/x/y/' に新しいスクリプトを実行することを意味し、検索と置換を意味し、x のすべての出現箇所を見つけて y に置き換えます (ただし、これは、' s/x/y/g' g はグローバルに
's/(x)/\1y/' を表します。括弧は見つかった x を逆参照するためのものです。おそらく x は変化するある種の正規表現でした。\1 は話します括弧の最初のセットについて、そこにあったものを置きます. これは、x のすべての出現を見つけて、それを xy に置き換え
ます
.そのため、行の残りの部分が「一致」するか、それがなくても pass=blahblah のような文字列は pass=new_passwordblahblah になります

おっと、以下は理解不足ですが、bash
を使用する将来の訪問者の質問のタイトルに答える可能性があります。http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-10.htmlread

pass="blahblah"
read tmp_pass
[ "$tmp_pass" == "" ] || pass=$tmp_pass

Enterキーを押しただけの場合、tmp_passは空になりますが、空でない場合は、パスをその値に設定することになります

于 2013-10-20T04:06:55.217 に答える
0

わかったので、これがファイル内の変数の値を置き換える基本的なプロンプトを作成する方法です。

 #! /system/bin/bash

 read -p "Enter newpass: " NEWPASS

 sed -i -e"s/^pass=.*/pass=$NEWPASS/" /etc/file.conf

私は走った:

 cat /etc/file.conf 

ファイル内の値が変更されたことを確認してください。助けてくれたみんなに感謝します。あなたなしでは成し遂げられませんでした。

于 2013-10-20T05:43:36.627 に答える