Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays sed中作为模式的变量扩展不起作用_Arrays_Regex_Bash_Sed - Fatal编程技术网

Arrays sed中作为模式的变量扩展不起作用

Arrays sed中作为模式的变量扩展不起作用,arrays,regex,bash,sed,Arrays,Regex,Bash,Sed,我有一个简单的脚本来设置/etc/ssh/sshd\u config中的几个参数: #! /bin/bash declare -a param=('Banner' 'ClientAliveInterval' 'ClientAliveCountMax' 'Ciphers' \ 'PermitUserEnvironment' 'PermitEmptyPasswords' 'PermitRootLogin' \ 'HostbasedAuthentication' 'IgnoreRhosts' 'Ma

我有一个简单的脚本来设置/etc/ssh/sshd\u config中的几个参数:

#! /bin/bash

declare -a param=('Banner' 'ClientAliveInterval' 'ClientAliveCountMax' 'Ciphers' \
'PermitUserEnvironment' 'PermitEmptyPasswords' 'PermitRootLogin' \
'HostbasedAuthentication' 'IgnoreRhosts' 'MaxAuthTries' \
'X11Forwarding' 'LogLevel'\
)

declare -a val=('/etc/issue.net' '300' '0' 'aes128-ctr,aes192-ctr,aes256-ctr' \
'no' 'no' 'no' 'no' 'yes' '4' 'no' 'INFO' \
)

for (( i=0;i<12;i++ ))
do
 #echo "${param[$i]} ${val[$i]}"
  egrep "^[ #]*${param[$i]}.*" /etc/ssh/sshd_config &> /dev/null
   if [ $? -eq 0 ];
    then
       sed -i "s|^[ #]*\$param[$i].*|${param[$i]} ${val[$i]}|1" /etc/ssh/sshd_config
  else
       echo "${param[$i]} ${val[$i]}" >> /etc/ssh/sshd_config
  fi
done;

有人能帮我吗。不过,我的阵列扩展和脚本中的所有内容都很好。我已经用一个
echo
打印输出检查了同样的情况。

不确定为什么要对
$
进行转义,要访问数组元素,需要使用
${param[$I]}

您可以使用:

sed -i "s~^[ #]*${param[$i]}.*~${param[$i]} ${val[$i]}~1" /etc/ssh/sshd_config

顺便说一句,
^[#]*
将只在行首匹配空格或
#

太好了。谢谢,它可以工作。然而,还有一个问题,只是为了让我理解正确。搜索和替换的基本
sed
语法为:
sed的/pattern/change_to/g'文件
。但是在你的回答中,我看到的是
~
。更重要的是
s~
。你能解释一下吗。提前感谢..我使用了
~
,因为
sed
允许任何字符作为正则表达式分隔符,并且在搜索文本中找不到
~
sed -i "s~^[ #]*${param[$i]}.*~${param[$i]} ${val[$i]}~1" /etc/ssh/sshd_config