以下shell脚本是什么意思,转成python是什么样的: if [ -s "${UUT_SN[itemloop]}_level3_item.txt" ] ; then format_error_line=() invalid_error_line=() line_count=0 while read itemline do ((line_count++)) if ! grep -iE "^[.+][ ]{1,}pass .+|^[.+][ ]{1,}fail .+" <<<"$itemline" ; then format_error_line[${#format_error_line[@]}]="$line_count" fi #检查三层记录文件里是否有不可识别的符号 line_mark_count=$(awk -F "" '{print NF}' <<<"$itemline") for((line_mark_loop=0;line_mark_loop<line_mark_count;line_mark_loop++)) do line_mark_ascii=$(echo "${itemline:line_mark_loop:1}" | awk 'BEGIN{for(i=0;i<255;i++)a[sprintf("%c",i)]=i}{print a[$0]}') if ! [[ ${line_mark_ascii} -ge 32 && ${line_mark_ascii} -le 126 ]] ; then invalid_error_line[${#invalid_error_line[@]}]="$line_count" continue 2 fi done done <"${UUT_SN[itemloop]}_level3_item.txt" if [ "0" != "${#format_error_line[@]}" ] ; then mv ${UUT_SN[itemloop]}_level3_item.txt ${UUT_SN[itemloop]}_level3_item.old echo "[level3_format] Fail $(date +"%y-%m-%d %H:%M:%S") format error,please check ${UUT_SN[itemloop]}_level3_item.old in line:${format_error_line[@]}" | tee "${UUT_SN[itemloop]}_level3_item.txt" fi if [ "0" != "${#invalid_error_line[@]}" ] ; then [ ! -s ${UUT_SN[itemloop]}_level3_item.old ] && mv ${UUT_SN[itemloop]}_level3_item.txt ${UUT_SN[itemloop]}_level3_item.old echo "[level3_invalid_word] Fail $(date +"%y-%m-%d %H:%M:%S") content invalid word,please check ${UUT_SN[itemloop]}_level3_item.old in line:${invalid_error_line[@]}" | tee "${UUT_SN[itemloop]}_level3_item.txt" fi fi
时间: 2023-11-27 19:54:08 浏览: 26
这是一个shell脚本,主要功能是检查文件中的内容是否符合特定的格式。其中,if语句检查文件是否存在且非空,然后使用while循环逐行读取文件内容。在每一行中,if语句使用grep命令查找是否存在特定格式的内容,如果不存在则记录该行所在的行号。接着,脚本使用awk命令逐个字符地检查该行是否有不可识别的符号,并记录该行所在的行号。最后,if语句根据记录的行号输出错误信息,并将错误信息输出到文件中。
以下是相应的Python代码:
```python
import os
for itemloop in range(len(UUT_SN)):
filename = UUT_SN[itemloop] + "_level3_item.txt"
if os.path.isfile(filename) and os.path.getsize(filename) > 0:
format_error_line = []
invalid_error_line = []
line_count = 0
with open(filename, 'r') as f:
for itemline in f:
line_count += 1
if not re.search(r'^[.+][ ]{1,}(pass|fail) .+', itemline, re.IGNORECASE):
format_error_line.append(str(line_count))
line_mark_count = len(itemline)
for line_mark_loop in range(line_mark_count):
line_mark_ascii = ord(itemline[line_mark_loop])
if not (line_mark_ascii >= 32 and line_mark_ascii <= 126):
invalid_error_line.append(str(line_count))
break
if len(format_error_line) > 0:
os.rename(filename, UUT_SN[itemloop] + "_level3_item.old")
with open(filename, 'w') as f:
f.write("[level3_format] Fail " + time.strftime("%y-%m-%d %H:%M:%S") + " format error,please check " + UUT_SN[itemloop] + "_level3_item.old in line:" + ",".join(format_error_line))
f.flush()
os.fsync(f.fileno())
if len(invalid_error_line) > 0:
if not os.path.isfile(UUT_SN[itemloop] + "_level3_item.old"):
os.rename(filename, UUT_SN[itemloop] + "_level3_item.old")
with open(filename, 'w') as f:
f.write("[level3_invalid_word] Fail " + time.strftime("%y-%m-%d %H:%M:%S") + " content invalid word,please check " + UUT_SN[itemloop] + "_level3_item.old in line:" + ",".join(invalid_error_line))
f.flush()
os.fsync(f.fileno())
```