Bash脚本| | sed命令

Bash脚本| | sed命令,bash,sed,user-input,Bash,Sed,User Input,如果字符串匹配,我尝试在一行前面添加#。 字符串将由用户读取。 Directsed命令对我来说很好,但当用户读取命令时,它会抛出错误: server cust01-stg01-ins01-wfm13-bck-610358970-22.int.stg.mykronos.com:80 resolve max_fails=0; server cust01-stg01-ins01-wfm13-bck-610358970-25.int.stg.mykronos.com:80 resolve max_fai

如果字符串匹配,我尝试在一行前面添加#。 字符串将由用户读取。 Direct
sed
命令对我来说很好,但当用户读取命令时,它会抛出错误:

server cust01-stg01-ins01-wfm13-bck-610358970-22.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-25.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-21.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-23.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-24.int.stg.mykronos.com:80 resolve max_fails=0;
现在,假设用户希望注释带有匹配字符的行
“cust01-stg01-ins01-wfm13-bck-610358970-22”
,则需要以下输出

#server cust01-stg01-ins01-wfm13-bck-610358970-22.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-25.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-21.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-23.int.stg.mykronos.com:80 resolve max_fails=0;
server cust01-stg01-ins01-wfm13-bck-610358970-24.int.stg.mykronos.com:80 resolve max_fails=0;


sudo sed -i "/cust01-stg01-ins01-wfm13-bck-610358970-23/s/^/#/" wfm_backend_nginx.state
这对我来说效果很好,但当我尝试低于命令时,它就是抛出错误

[root@cust01-stg01-ins01-wfm13-bck-ilb1-610358970 tmp]# cat ilb_commnet.sh
#!/bin/bash -xe
sudo read -p "enter host_name :" Host
sudo sed -i -e "/${Host}/s/^/#/" /tmp/wfm_backend_nginx.state
输出为:

sed: -e expression #1, char 0: no previous regular expression
sudo
运行一个单独的进程,该进程将读取输入并将其保存到
Host
中。然后进程将退出,用读取的值破坏整个环境


删除
sudo
-读取当前进程中的值。

使用
sudo
在这里是完全疯狂的。您正在特权子shell中运行
read
,然后该子shell退出并获取变量,然后才能将其用于任何用途

bash$ sudo read -p hello
sudo: read: command not found
。。。实际上,
sudo-read
只是一个语法错误,因为
sudo
无法运行内置的shell。它试图查找
/usr/bin/read
/bin/read
等,但没有找到任何东西

bash$ sudo read -p hello
sudo: read: command not found
即使没有
sudo
,您的代码也应该在尝试将变量传递给特权命令之前检查变量。也许像

#/bin/bash-xe
虽然真实;做
读取-p“输入主机名:”主机
案例$Host in
*[!A-Za-z0-9]*)回显“$0:主机名中的无效字符”>&2;;
*)中断
以撒
完成
sudo sed-i-e/${Host}/s/^/#/“/tmp/wfm_backend_nginx.state

请编辑您的帖子。请阅读有关降价编辑的内容。请将代码段放入代码块中。