初学者寻求帮助(:
因此,我有一个脚本可以检查文本文件中的方括号,并告诉它们是否正确关闭。但是,我也想使我的脚本打印出不正确的行号(其中括号未正确关闭)。我试过计算文件行数,然后创建一个嵌套的while循环,但是,这对我根本不起作用):是否有任何简单的解决方案?如果可能的话,我想离开LINE柜台:
INPUT="$1"
count=0
LINE=0
# Check if file exists
[ ! -f $INPUT ] && { echo "file $INPUT do not exist."; exit ; }
# Count file lines and read every char
while IFS= read -r LINE
do
LINE=$(( LINE + 1 ))
while read -n1 char
do
[ "$char" == "(" ] && (( count++ ))
[ "$char" == ")" ] && (( count-- ))
if [ "$count" -lt 0 ]
then
break
fi
done
done < "$INPUT"
if [ "$count" -lt 0 ]
then
echo "Found a mistake in $LINE line "
else
echo "Everything's correct"
fi
您有几个问题:
read
在内部循环中使用文件的输入,而不是LINE
。线
LINE=$(( LINE + 1 ))
确实是错误的:LINE
文件行的内容以及您要添加1
到该行的内容。奇怪的。
break
只能打破内部循环(它应该打破两个循环)。使用break 2
此。这是脚本的工作版本:
input=$1
count=0
linenb=0
# Check if file exists
[[ -f $input ]] || { echo "Error: file $input do not exist."; exit 1; }
# Count file lines and read every char
while IFS= read -r line; do
((++linenb))
while read -n1 char; do
[[ $char == '(' ]] && ((++count))
[[ $char == ')' ]] && ((--count))
((count>=0)) || break 2
done <<< "$line"
done < "$input"
if ((count<0)); then
echo "Found a mistake in line #$linenb:"
printf '%s\n' "$line"
else
echo "Everything's correct"
fi
请注意,我使用了更多((...))
和[[...]]
。
我还使用了小写的变量名,因为您的计算机并不充耳不闻:您无需大喊变量名。(而且更好看)。最好使用小写的变量名,因为它们不会与Bash自己的变量发生冲突。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句