我有一个文本文件,里面有这个示例值:
1:0:0:Monitoring stuff with Zabbix/OCS:24 HOURS
所以我想用一个变量改变第二个字段。我想这样做:
#!/bin/bash
PRIOR="Priority = 1 - Must have | 2 - Nice to have | 3 - Interesting | 0 - Not interesting"
while read -r line;
do
echo $line
echo $PRIOR
echo -n "Set your priority: "
read SETP</dev/tty
echo "Priority defined: "$SETP
<change my 2nd column value with $SETP>
done < courses.txt
最佳答案
有一个办法
newline=$( echo "$line" | sed "s/:[^:]\+/:$SETP/")
这将用冒号和用户的输入替换第一个冒号后跟非冒号字符。
一些代码评审说明:
养成使用良好缩进的习惯——你未来的自我将感谢你编写了可读和可维护的代码
不要使用所有的大写变量名,把它们留给shell——总有一天你会写
read PATH
然后想知道为什么你的脚本被破坏了。priorities="..."
,read setp
等quote your variables——除非你知道什么时候不引用它们,否则总是这样做。
echo "$line"
echo "Priority defined: $setp"
--引号内的变量验证用户的输入:
if [[ $setp == *[^0-9]* ]]; then echo "digits only! try again"; fi
在bash中,您可以编写
read -p "Set your priority: " setp < /dev/tty
--不需要单独的echo语句了解语言支持的数据结构非常重要——学习如何使用bash数组。