给定配置文件,例如sshd_config:
[...]
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication yes
X11Forwarding yes
X11DisplayOffset 10
[...]
我想编写一个允许我设置配置设置的命令。例如,我想将PasswordAuthentication
设置为no
。如果该条目已经存在,我想替换它,如果没有,我想在文件的末尾添加它。
我怎样才能从shell中做到这一点?
答案 0 :(得分: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
答案 1 :(得分:0)
awk '{if($1~/PasswordAuthentication/){flag=1;if($2~/yes/)$2="no";print $0}else{print}} END{if(flag!=1)print "PasswordAuthentication no"}' temp