多写写脚本,训练代码思维

    前言  


         我感觉程序能够改变世界的一个关键原因是它能够代替人完成许多相对重复的工作,特别是电脑上的工作。
        有一些事情可以通过一行行命令输入来完成,但实际上一般也可以编写脚本来完成。你可能会说,反正这么简单,何必又编写一个脚本来完成呢?
        如果工作量不大的话,确实不能说提高了很大的效率。但是我认为我们不能经常遇到工作量大而且适合用程序来解决的问题,我们平时要从这些小事情写代码来训练自己的思维,这样在遇到大问题的时候才能更加胸有成竹,得心应手,游刃有余。不能说不是老师或者老板布置的任务,或者没有指示要用先进的方法来解决问题,就要让自己用最原始的方法去完成。
        当然,这样似乎有点卷了,但是我认为对于像我这样的程序新手,不但要学会写代码本身,而且要察觉自己当下有什么事情是能用代码去解决的,这种发现问题从而引发新思路的能力我认为也是重要的。我们周围其实有很多东西都能尝试去通过程序辅助的方式进行优化。不过这个也不能单从效率去考虑,什么都写个代码去提高效率不一定是合适的,比如你去QQ游戏玩五子棋,一胜一败,乐哉其中,就不能说一定要写一个人工智能来帮你百战百胜,因为这样虽然能高效刷战绩,但是却违背了玩五子棋的初衷,你也没有感到思考棋局带来的快乐。

小例子

        我们在使用linux进行任务的时候就可以用写脚本的方式来训练代码能力。比如,编译原理实验中,要有几个频繁使用但相对固定的命令,我们就可以将它们写成脚本(当然,编译这些命令其实可以直接在IDE什么的配置好,然后点击一下就ok了)。

文件夹结构如左图。

每次改完各种源代码文件,就要把它们编译好然后进行测试样例。对于这个编译和测试样例的任务,我们虽然可以自己一条一条输入命令,但是不妨写个脚本来解决。下面就是使用编译出来的可执行文件parser进行测试的linux脚本run(注意这里的run是指文件名):

#!/bin/bash

# 设置parser程序的路径
parser_program="./parser"  # 用实际的parser程序路径替换这里

# 检查parser程序是否可执行
if [ ! -x "$parser_program" ]; then
  echo "找不到可执行的parser程序,请检查路径设置。"
  exit 1
fi

# 输入文件所在的目录
input_dir="../Test"
# 输出结果保存的目录
output_dir="../test_result"
# 使用find命令获取所有输入文件,并将文件名保存到数组files中
echo "正在读取$input_dir下的文件"
# 检查输入文件夹是否为空
if [ -z "$(ls -A "$input_dir")" ]; then
  echo "输入文件夹 $input_dir 是空的,没有文件可处理。"
  exit 1
fi
files=()
while IFS= read file; do
  echo "$file"
  files+=("$file")
done < <(find "$input_dir" -type f)
echo "已读取$input_dir下的文件"
if [ ! -d "$output_dir" ];then
  mkdir "$output_dir"
fi
# 循环遍历并编译每个文件,并将结果保存到不同的文本文件
for input_file in "${files[@]}"; do
  # 生成对应的输出文件名,例如,如果输入文件是./External_Test/in/testcase_1,则输出文件名为compile_results_testcase_1.txt
  output_file="$output_dir/compile_results_$(basename "$input_file" | sed 's/\.\.\/Test\///').txt"

  echo "正在编译文件: $input_file"
  "$parser_program" "$input_file" > "$output_file"  # 使用>覆盖输出到文本文件
  compile_status=$?
  if [ $compile_status -eq 0 ]; then
    echo "编译成功!" >> "$output_file"  # 将成功消息追加到文本文件
  else
    echo "编译失败,请检查错误信息。" >> "$output_file"  # 将失败消息追加到文本文件
  fi
done
echo "已完成编译."
exit 0

使用注意事项:
使用 parser 进行测试的脚本, 该脚本会测试编译与 Code 文件夹位于同一父目录下的Test文件夹的所有文件, 并将编译结果输出到test_result文件夹(也是与Code文件夹位于同一父目录下) 。

1. 进入代码目录 cd /Code

2. 赋予脚本文件以执行权限 chmod +x run

3. 执行脚本文件./run

成功运行的效果如下:

这样就可以自动化完成很多样例的测试并输出存储到文件夹中了。

当然,由于你对脚本的语法不是很了解,所以这个脚本可能有些东西会看起来有点怪。

如果你想小试牛刀,可以看一下Miking-G的这篇博客:Managing Test Files with create_files and delete_files Bash Scripts-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_43469174/article/details/133934422