我的shell脚本中有用户设置。我该如何询问用户输入并记住它?在示例中我有代码:
ALTERNATEMEMORY="false"
我需要询问用户输入(在' configure'模式下运行脚本时):
echo "Use alternate memory?"
select yn in "true" "false"; do
case $yn in
Yes ) [permament save ALTERNATEMEMORY as "true"];;
No ) [permament save ALTERNATEMEMORY as "false"];;
esac
done
脚本应该如上所述询问用户,阅读他的输入,并根据选择设置ALTERNATEMEMORY
到相应的状态。下次运行脚本(不配置,只运行)时,它应该记住该设置。我应该把这些方括号放入什么?
如果我在发帖时犯了错误,请原谅我 - 这是我第一次使用stackoverflow。
答案 0 :(得分:2)
即使重新启动后,记住从一次运行到下一次运行的设置的标准方法是使用配置文件。对于系统范围的设置,这些配置文件通常位于/etc
中,并且可以命名,例如/etc/myprog.conf
。对于特定于用户的设置,该文件通常位于主目录中,其名称以.
开头,例如$HOME/.myprog.conf
。选择其中一个路径并创建配置文件:
echo "ALTERNATEMEMORY=false" >path/myprog.conf
现在,让脚本的配置部分根据需要更新该文件:
echo "Use alternate memory?"
select yn in "true" "false"; do
case "$yn" in
true)
sed -i '/ALTERNATEMEMORY/ s/.*/ALTERNATEMEMORY=true/' path/myprog.conf
break
;;
false)
sed -i '/ALTERNATEMEMORY/ s/.*/ALTERNATEMEMORY=false/' path/myprog.conf
break
;;
esac
done
在上文中,我们使用sed -i
来就地更新文件。这适用于linux。如果您使用的是BSD系统(OSX),则需要在该命令中添加两个引号,如sed -i "" ...
如果我们想将ALTERNATEMEMORY
设置为值$sel
,其中sel
是包含任意字符的shell变量,那么我们需要在进行替换之前将它们转义。这可以完成as follows(假设shell是bash):
escaped_sel=$(sed 's/[&/\]/\\&/g' <<< "$sel")
sed -i "/ALTERNATEMEMORY/ s/.*/ALTERNATEMEMORY=$escaped_sel/" path/myprog.conf
答案 1 :(得分:0)
拥有包含以下行的mem.conf
文件
UNSET
TRUE
第一行可以是SET/UNSET
,用于检查用户是否已配置,第二行可以是TRUE/FALSE
,以检查是否使用备用内存。
最初,第一行应设置为UNSET
。
然后编写脚本configure.sh
,如下所示:
is_set=`head -n1 mem.conf`
if [[ $is_set == "SET" ]]
then
{
echo "Your have already configured the settings."
}
else
{
echo "Use Alternate memory?"
options=("TRUE" "FALSE" "QUIT")
select opt in "${options[@]}"
do
case $opt in
"TRUE")
echo "SET" > mem.conf
echo "TRUE" >> mem.conf
echo "Configuration Saved !!"
break;
;;
"FALSE")
echo "SET" > mem.conf
echo "FALSE" >> mem.conf
echo "Configuration Saved !!"
break;
;;
"QUIT")
echo "Seems like you have not made up your mind yet !"
echo "Please come back later."
break;
;;
*) echo "invalid option"
;;
esac
done
}
fi
echo "Configuration File : "`pwd`"/mem.conf"
此处的优点是您可以强制编辑mem.conf
从头开始。