変数に値を取得したら、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