4つの変数を生成するbashダイアログボックスがあります。各個別変数 -空でない場合- sedコマンドが同じファイルで実行されるようにします。
var1、var2、var3、およびvar4変数の4つのBashダイアログ・スクリプトの生成
#!/usr/bin/env bash
response=$(dialog \
--title "ini configure" \
--form "Configure php.ini" \
15 50 0 \
"Execution Time:" 1 1 "$exe_time" 1 10 20 0 \
"Memory Limit:" 2 1 "$mem_limit" 2 10 20 0 \
"Max File Size:" 3 1 "$max_file" 3 10 20 0 \
"Max Post Size:" 4 1 "$max_post" 4 10 20 0 \
3>&1 1>&2 2>&3 3>&-)
responsearray=($response)
var1=${responsearray[0]}
var2=${responsearray[1]}
var3=${responsearray[2]}
var4=${responsearray[3]}
これら4つの条件付きsedコマンドを結合する方法は?
if [[ -n "$var1" ]]; then
sed -i 's/^;*\max_execution_time = .*/max_execution_time = "${var1}"/' /user/php8.0-fpm/php.ini
if [[ -n "$var2" ]]; then
sed -i 's/^;*\memory_limit = .*/memory_limit = "${var2}"/' /user/php8.0-fpm/php.ini
if [[ -n "$var3" ]]; then
sed -i 's/^;*\max_file_size = .*/max_file_size = "${var3}"/' /user/php8.0-fpm/php.ini
if [[ -n "$var4" ]]; then
sed -i 's/^;*\max_post_size = .*/max_post_size = "${var4}"/' /user/php8.0-fpm/php.ini
複数のsedコマンドをセミコロンと組み合わせることができることを知っていますが、問題を引き起こすのは条件です。
オペレーティングシステム:Ubuntu 20.04ヘッドレス
ベストアンサー1
他の回答を受け入れましたが、元のアイデアがsed
フィルタリングに単一のコマンドを使用している場合(シェル条件は必要ありません)、次の簡単なトリックを使用できます。
sed -i "/^${var1}/!s/^;*\(max_execution_time = \).*/\1${var1}/
/^${var2}/!s/^;*\(memory_limit = \).*/\1${var2}/
/^${var3}/!s/^;*\(max_file_size = \).*/\1${var3}/
/^${var4}/!s/^;*\(max_post_size = \).*/\1${var4}/" /user/php8.0-fpm/php.ini
s
ご覧のとおり、各代替コマンドの逆方向アドレスを追加しました。空の場合にのみ/^${var1}/
一致します(または行のセミコロン以下で構成されます)。値が渡された場合にのみコマンドが実行されるように一致をvar1
反転します。!
s
var