最近写了一个可以格式化输出表格的shell脚本,根据扫描出目录的owner,进而加入一些有规律性的数据,最后输出我想要的表格文件
脚本中含有4个相同的while循环,循环里面的内容是在指定行段插入数据,不同的只是while的条件语句(判断行号的语句)
在做测试的时候发现,我再扫描a目录时,第2个while没有执行,在扫描b目录时,第4个while没有执行,以此类推,在给多个目录做测试时,均出现了其中一个while没有执行的情况,剩余3个while都完美执行了。
问题相关代码,请勿粘贴截图
#!bin/bash
ls -al awk '{print $3}' | sort -u | uniq | tee owner.txt #输出owner并存入文件
rc=$(cat owner.txt | wc -l) #计算owner数量/行数并赋值给变量rc
sed -n '2,'$rc'p' owner.txt | tee -a owner.txt #复制owner到文件
sed -n '2,'$(($rc+$rc-1))'p' owner.txt | tee -a owner.txt #第二次复制owner到文件,此时文件内有重复有序的4段owner
m=$(pwd) #将当前目录路径赋值给变量m
n=2 #设置变量n
while [[ $n < $(($rc+1)) ]] #判断条件:n的范围在第二行到第rc行
do
sed -i ''$n's/^/hello /g' owner.txt
#在第n行的行首插入文本"hello "
sed -i ''$n's#$# '$m' abccbbbb#g' owner.txt
#在第n行的行尾插入文本“ '$m' vcbbbb”
#此时$m内含有分隔符‘/',所以此条sed命令的分隔符需要变更为除/以外的任意符号
n=$(($n+1)) # 行数加一,对下一行进行操作
done
#一下while语句同上,只有追加的数据内容有细微变化
n=$(($rc+1))
while [[ $n < $(($rc+$rc)) ]]
do
sed -i ''$n's/^/helloo /g' owner.txt
sed -i ''$n's#$# '$m' jdhym#g' owner.txt
n=$(($n+1))
done
n=$(($rc+$rc))
while [[ $n < $(($rc+$rc+$rc-1)) ]]
do
sed -i ''$n's/^/hellooo /g' owner.txt
sed -i ''$n's#$# '$m' fgdddss#g' owner.txt
n=$(($n+1))
done
n=$(($rc+$rc+$rc-1))
while [[ $n < $(($rc+$rc+$rc+$rc-2)) ]]
do
sed -i ''$n's/^/hellooooo /g' owner.txt
sed -i ''$n's#$# '$m' 3411s#g' owner.txt
n=$(($n+1))
done
代码并没有完整贴上,只贴了循环这一部分,麻烦大家帮忙看看。
由于系统的环境是csh,我不清楚是不是bash在csh环境下的问题,也没测试出来,csh我不太了解
主要是为什么在测试不同的目录时,哪一个循环不执行比较随机没有规律。