2016-03-19 24 views
0

ユーザをvncserver設定ファイルに自動的に追加するbashスクリプトを作成します。 CentOSにguideによれば、Iは/etc/sysconfig/vncservervncserver設定ファイルにユーザを追加するスクリプト

  1. VNCSERVERS="1:user1"からVNCSERVERS="1:user1 2:user2"に最初の行を展開
  2. 新しいユーザ(この例では第二のユーザ)VNCSERVERARGS[2]="-geometry 1250x700"

の行を追加し、編集しなければなりませんしたがって、./add_user_to_vnc user2を実行すると、元のファイルの内容は

VNCSERVERS="1:user1" 
VNCSERVERARGS[1]="-geometry 1250x700" 
から更新されます(私にとっては)、このようなスクリプトの

VNCSERVERS="1:user1 2:user2" 
VNCSERVERARGS[1]="-geometry 1250x700" 
VNCSERVERARGS[2]="-geometry 1250x700" 

2つのハードの部分は、カウンタを維持し、最初の行を拡大することです。最後の行を追加するには、echo >>コマンドを使ってかなりシンプルにすべきです!

これは何ですか?ここで

+0

万一ユーザー* * n個から行くの一般的なケースのためのスクリプトの仕事に* N * + 1人のユーザ? –

+0

はい、私は最後のユーザーの番号 – mahmood

+0

が覚えられないので、それが最も理にかなっています。 'VNCSERVERS'行を解析し、最後のユーザを* paramete-expansion *で隔離し、ユーザ番号を取得して、その行に' sed'で追加すると、 'sed'を2度目に呼び出して'VNCSERVERARGS'行を追加します。 (私のお金はベンジャミンの解決策になっています。もし彼がそれをしなければ、私は助けます)。 –

答えて

2

は、私はそれを行うだろうかです:

#!/bin/bash 

# Get new user name 
new_user="$1" 

# Get list of current users 
servers="$(grep 'VNCSERVERS' vncserver)" 

# Extract counter of last user 
users="${servers#*\"}"  # Remove everything up to first quote 
last_user="${users##* }" # Remove everything up to last space 
ctr="${last_user%%:*}"  # Remove everything starting from colon 

# Increase counter 
((++ctr)) 

# Remove trailing quotes from line with current users 
servers="${servers%\"}" 

# Construct new first line 
printf -v servers "%s %d:%s\"" "$servers" "$ctr" "$new_user" 

# Construct new line for server args 
serv_args="VNCSERVERARGS[$ctr]=\"-geometry 1250x700\"" 

# Use sed to replace first line and append last line 
sed '1s/.*/'"$servers"'/;$a\'"$serv_args"'' vncserver 

備考:

  • これはstdoutに新しいファイルを印刷します。あなたのvncserverファイルを更新するには、あなたが
    • のいずれかの一時ファイルにリダイレクトし、そのファイルの名前を変更する必要があります(./script > vncserverがそれを処理する前に、ファイルを切り捨てるということに気づくと、あなたは空のファイルで終わるだろう)
    • インプレース処理用にsed -i(またはBSD sed:sed -i'')を使用するようにsed行を更新してください。バックアップファイルを保持するには、sed -i.bakを使用します。
  • いくつかのsedsは、追加コマンドa\の後に改行が必要です。 sedコマンドは、

    sed '1s/.*/'"$servers"'/;$a\ 
    '"$serv_args"'' vncserver 
    
  • はカウンターを抽出なるビットかさばる感じているが、それは、リストので、スペースを入れずにいる唯一のユーザの可能性を考慮しなければなりません。もっと洗練された解決策が可能であると私は確信しています。 (sed -i付き)

使用例:

$ cat vncserver 
VNCSERVERS="1:user1" 
VNCSERVERARGS[1]="-geometry 1250x700" 
$ ./SO.sh user2 
$ cat vncserver 
VNCSERVERS="1:user1 2:user2" 
VNCSERVERARGS[1]="-geometry 1250x700" 
VNCSERVERARGS[2]="-geometry 1250x700" 
$ ./SO.sh another_user 
$ cat vncserver 
VNCSERVERS="1:user1 2:user2 3:another_user" 
VNCSERVERARGS[1]="-geometry 1250x700" 
VNCSERVERARGS[2]="-geometry 1250x700" 
VNCSERVERARGS[3]="-geometry 1250x700" 
$ ./SO.sh latest_user 
$ cat vncserver 
VNCSERVERS="1:user1 2:user2 3:another_user 4:latest_user" 
VNCSERVERARGS[1]="-geometry 1250x700" 
VNCSERVERARGS[2]="-geometry 1250x700" 
VNCSERVERARGS[3]="-geometry 1250x700" 
VNCSERVERARGS[4]="-geometry 1250x700" 
+0

私が持っている検証の調整は '((ctr ++))|| {printf "エラー:無効な 'ctr'値 '%s'。\ n "" $ ctr "; exit 1;}'(ちょうど悪い情報が設定ファイルに書き出されないようにするために)常にbashの文字列処理が好きでした...(ああ、 'user1'私はvncserverユーザが実際の名前として 'user1'を実際の名前として疑うことは疑問です:' –

+0

@ DavidC.Rankinありがとう、更新済! –

+0

@David Oh、監督.. –

関連する問題