将用户输入写入BASH文件中的值变量

将用户输入写入BASH文件中的值变量,bash,shell,Bash,Shell,我有一个.conf文件,另一个脚本读取该文件时只包含变量,实际上目前只包含这三个变量 pass=blahblahblah port=number user=someusername 如何编写脚本来更改/替换/重写.conf文件中的变量?我早些时候以另一种形式问了这个问题,结果被关了。这对我来说是一件非常陌生的事情&在我刚开始完成这样的任务之前,可能会很困惑。这是我拼图的最后一块 谢谢你,谢谢你的帮助 要为每个要更改的变量更改文件中的变量,需要这样一行代码 sed -e

我有一个.conf文件,另一个脚本读取该文件时只包含变量,实际上目前只包含这三个变量

    pass=blahblahblah
    port=number 
    user=someusername
如何编写脚本来更改/替换/重写.conf文件中的变量?我早些时候以另一种形式问了这个问题,结果被关了。这对我来说是一件非常陌生的事情&在我刚开始完成这样的任务之前,可能会很困惑。这是我拼图的最后一块


谢谢你,谢谢你的帮助

要为每个要更改的变量更改文件中的变量,需要这样一行代码

sed -e 's/\(^pass=\).*/\1my_new_password/' -e 's/\(^file=\).*/\1new_file_name/' /etc/file.conf 
只需更改括号内的单词以及最后一个/'之前的\1后面的所有内容,以匹配您的大小写

一部分一部分地分解它
-e表示为sed编写新脚本
“s/x/y/”表示搜索和替换,查找x的每一次出现并替换为y(尽管这每行发生一次,除非您将其写为“s/x/y/g”,g代表全局
“s/(x)/\1y/”括号用于返回所找到的x,可能x是某种不同的正则表达式,\1讨论了第一组括号,并将括号中的内容放在那里。这将查找x的每一次出现,并将其替换为xy
^表示在行首匹配。
.*表示匹配任意字符任意次数,这样就可以使行的其余部分“匹配”,否则如果没有匹配,则像pass=blahblah这样的字符串将变成pass=newpasswordblahblah

下面的oops是一个误解,但可能会为未来的访问者回答问题的标题
在bash中使用
read


如果他们只是点击“输入”,tmp_pass将为空,但如果它不为空,则最终将pass设置为其值

一旦将值输入变量,您可以使用
sed
对文件进行就地编辑,大致如下所示:

$ cat test.conf
pass=blahblahblah
port=number
user=someusername

$ export NEWPASS='password'

$ sed -i -e"s/^pass=.*/pass=$NEWPASS/" test.conf

$ cat test.conf
pass=password
port=number
user=someusername

根据请求更新捕获输入的bash脚本中的示例。由于这是一个密码,我们使用
-s
选项
读取
,以便字符不会回显到屏幕上。我们还提供了一些基本条件测试示例(不允许使用空密码)和错误捕获来提前终止脚本。结尾多余的“完成”消息是为了说明脚本在捕获错误时确实会终止(除非没有错误发生,否则阻止显示最终消息)。将传递给
sed
的文件名更改为不存在的文件名将触发“更改尝试失败”消息

#!/bin/bash

read -s -p "Please specify the new password: " NEWPASS
echo ""

if test "$NEWPASS" = ""; then
        echo "$0: sorry, password cannot be blank" >&2
        exit 1;
fi

sed -i -e"s/^pass=.*/pass=$NEWPASS/" test.conf

if test $? -eq 0; then
        echo 'password changed' >&2
else
        echo 'change attempt failed' >&2
        exit 1
fi

echo "done" >&2
运行示例:

$ cat test.conf
pass=blahblahblah
port=number
user=someusername
$ ./pwchange.bash
Please specify the new password: # it wasn't echoed, but I typed 'foo'
password changed
done
$ cat test.conf
pass=foo
port=number
user=someusername

我明白了,这就是创建一个基本提示的方法,它将替换文件中变量的值

 #! /system/bin/bash

 read -p "Enter newpass: " NEWPASS

 sed -i -e"s/^pass=.*/pass=$NEWPASS/" /etc/file.conf
我跑:

 cat /etc/file.conf 

&确实,文件中的值已更改。感谢所有帮助过我的人,没有你我无法完成此操作。

我如何让它写出变量到.conf,同时确保它替换文件中的任何类似变量。因此,我在文件中没有两次pass=line。啊,您只想通过一个文本文件替换内容吗?我将尝试一些测试并返回给您。您可能需要的命令是
sed
,我不理解,并认为您需要用户输入o更改变量的值例如.confile位于/etc/file.confYes以更改文件中变量的值;-)它更改传入的.conf文件,因此这就是我想要的。您能否演示如何使用read命令以提示用户输入确切地说,这正是我所看到的。这可以很容易地应用于其他情况。我整天都在寻找这个答案。额外的条件测试功能完全破坏了我的计划。:)谢谢你,伙计。
 cat /etc/file.conf