1

给定一个配置文件,例如 sshd_config:

[...]
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication yes
X11Forwarding yes
X11DisplayOffset 10
[...]

我想编写一个命令来设置配置设置。例如,我想设置PasswordAuthenticationno. 如果条目已经存在,我想替换它,如果不存在,我想将它添加到文件末尾。

我怎样才能从外壳做到这一点?

4

2 回答 2

2

您可以使用它awk来执行此操作。这是我写的一个脚本:

$ cat setProp.sh
#!/bin/sh

propFile=$1
key=$2
value=$3

awk -v "key=$key" -v "value=$value" '{
    if($1==key) {
        found=1
        print $1" "value
    } else {
        print
    }
}
END {
    if(!found) print key" "value
}' $propFile

用法:

$ setProp.sh myfile RhostsRSAAuthentication no
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication yes
X11Forwarding yes
X11DisplayOffset 10
于 2012-07-30T12:18:22.237 回答
0
awk '{if($1~/PasswordAuthentication/){flag=1;if($2~/yes/)$2="no";print $0}else{print}} END{if(flag!=1)print "PasswordAuthentication no"}' temp
于 2012-07-30T12:48:00.940 回答